PHP在脚本之外使用大量内存/时间?

我正在使用在Drupal中build立的网站,一般运行良好。 经过一些优化,需要20-75MB的内存和0.5-2s的大部分请求。 但是偶尔会花费15-20秒,这个过程将会超过1GB +的内存使用量。

我已经试过在PHP执行的开始和结束时(在Drupal的index.php中放置代码)追踪时间和内存使用情况,并且没有显示任何exception(它报告开始和结束之间的差异为1秒,内存一个例子中使用量增加了72MB)。 不知何故,PHP使用了大量的资源,但不在实际的PHP代码中。

这是第一次观察与Apache。 转移到一个新的服务器(使用标准的Ubuntu软件包),使网站更可靠,但它仍然发生。 即使在切换到nginx + php-fpm并完全closuresapache之后,php-fpm进程也显示相同的内存使用模式。 除了标准的PHP模块外,其他的只是memcache,stats和xhprof。

什么可以揭示为什么PHP在脚本本身之外使用如此多的内存?

我相信内存泄漏是相当普遍的PHP和它的图书馆。 通常PHP操作码caching也使用提供给PHP的大部分内存。

你是100%确定你有xhprof转储文件的问题情况,并没有显示过多的内存使用情况?

如果你是对的 – 你需要用gdb创build和分析可疑PHP进程的核心转储 – 它需要一些基本的C语言知识。

还检查错误跟踪器为您的PHP和库版本。

原来,一个函数使用register_shutdown在主代码结束后运行(显示debugging信息)。 这就解释了为什么它没有显示在我所做的日志中,或者在xhprof中,它在closures函数之前结束了。 修改这个似乎已经解决了这个问题。

你有可能在Drupal中启用了一个低效的模块。 首先禁用所有这些,看看是否改变了任何东西。

另外,这听起来像是你的痕迹不是真实的痕迹,看看这个以获得更好的痕迹: http : //www.youtube.com/watch?v= eF-p– AH37E

操作码caching(APC)只会以性能的名义为您提供帮助,所以我会最后一次提高性能。