linux – 如何使用Apache和PHP调查内存泄漏?
我们正在运行一个繁重的Drupal网站来执行财务建模.考虑到apache使用的内存增加而apache进程的数量保持稳定,我们似乎遇到了某种内存泄漏:
我们知道内存问题来自apache / PHP,因为无论何时我们发出/etc/init.d/httpd重新加载内存使用量下降(参见上面的屏幕截图和CLI输出): 在httpd重新加载之前 $free total used free shared buffers cached Mem: 49447692 45926468 3521224 0 191100 22609728 -/+ buffers/cache: 23125640 26322052 Swap: 2097144 536552 1560592 httpd重载后 $free total used free shared buffers cached Mem: 49447692 28905752 20541940 0 191360 22598428 -/+ buffers/cache: 6115964 43331728 Swap: 2097144 536552 1560592 每个apache线程都分配了一个512MB的PHP memory_limit,这解释了高内存使用量会占用少量请求,并且max_execution_time为120秒,它应该终止执行时间更长的线程,因此应该防止内存使用量不断增长我们我看到了. 问:我们如何调查导致此内存泄漏的原因? 理想情况下,我正在寻找可以在系统上执行的故障排除步骤,而无需打扰开发团队. 附加信息: OS: RHEL 5.6 PHP: 5.3 Drupal: 6.x MySQL: 5.6 仅供参考我们知道我们正在单独调查的交换问题,与我们在交换开始之前观察到的内存泄漏无关. 解决方法
不 – 这只是意味着它与网络流量有关.你已经提到你在盒子上运行mysql – 可能是管理网络服务器的数据 – 它可能就像这里的罪魁祸首一样容易.您的webstack使用的其他服务也是您未提及的.
不,不.您报告的平均7个服务器和最多25个忙碌服务器 – 但您的内存图表显示大约25Gb的增量. 真的,你应该从基本的HTTP调优开始 – 你似乎运行一个恒定的256 httpds,但你的峰值使用率是25 – 这只是简单的愚蠢.
否 – 仅当执行线程在PHP解释器中时 – 如果PHP被阻止则不行.
(叹) 如果你提供了有关如何配置Apache,线程或prefork,什么版本,如何调用PHP(module,cgi,fastcgi),是否使用持久连接,是否使用存储过程的详细信息,将会很有帮助. 我建议你首先将mysql移动到一个单独的机器上并停止使用持久连接(如果你当前正在使用它们).将内存限制设置得更低,并在每个脚本的基础上覆盖它.确保已安装并配置了循环引用垃圾收集器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |