PHP内存管理

Sta*_*bie 7 php memory memory-leaks memory-management

我的LAMP Web应用程序中有一些耗时且(可能)内存密集的函数.大多数这些函数将通过cron每分钟执行一次(在某些情况下,cron作业将执行这些函数的多个实例).

由于内存是有限的,我不想遇到我试图执行环境无法再处理的函数的问题.处理潜在的内存问题有什么好方法?

我猜我需要确定可用的内存量,执行每个函数需要多少内存,确定cron正在执行的其他函数及其内存使用情况等.

此外,我不想遇到某个函数以某种方式获得执行优先于其他函数的问题.如果给予任何优先权,我想以某种方式控制它.

Chr*_*rra 1

你可以研究像APC这样的缓存技术,它可以让你把东西直接写入RAM,这样你就可以快速访问它,如果你不想重复执行像mysql查询这样昂贵的任务,那么可以使用它。

我能想到的一个缓存示例是,您可以缓存电子邮件,而不是一次又一次从电子邮件服务器检索它们。基本上,如果您希望在脚本中保留一些内容以供下次脚本执行时保留,那么内存缓存是一种非常有用的技术,但如果您的脚本每次执行时都执行独特的操作,那么它将毫无用处。另外,对于 contoll,您可以在每个脚本执行时调用 memory_get_usage() 并将该值写入 apc 缓存,以便每个 cron 都可以检索该值并查看是否有足够的内存可供其完成。

至于平均使用情况,您可以编写一个数组,最后执行 100 个函数,当您再次调用该函数时,它可以从 ram 中 apc_fetch 并计算该函数的平均内存使用量,然后将其与正在使用的 ram 量进行比较现在,然后决定是否开始。此外,它可以将该估计写入当前内存使用变量中,以防止其他脚本运行。在该函数的末尾,您再次从变量中减去该金额。tl;dr:查看 apc_fetch、apc_store 和 memory_get_usage 函数