我们正在运行一个繁重的Drupal网站,以执行财务建模。考虑到apache使用的内存随着时间的增长而apache进程数保持稳定,我们似乎正在遇到某种内存泄漏:
我们知道内存问题来自apache / PHP,因为每当发出a时/etc/init.d/httpd reload
,内存使用率就会下降(请参见上面的屏幕截图和下面的CLI输出):
在httpd重新加载之前
$免费 已使用的可用共享缓冲区总数 内存:49447692 45926468 3521224 0 191100 22609728 -/ +缓冲区/缓存:23125640 26322052 掉期:2097144 536552 1560592
httpd重新加载后
$免费 已使用的可用共享缓冲区总数 内存:49447692 28905752 20541940 0 191360 22598428 -/ +缓冲区/缓存:6115964 43331728 掉期:2097144 536552 1560592
每个apache线程分配了一个memory_limit
512MB 的PHP ,这说明了内存使用率过高而请求量很少,而max_execution_time
120秒的中断时间将终止执行时间较长的线程,因此应避免内存使用率的持续增长。看到。
问:我们如何调查导致此内存泄漏的原因?
理想情况下,我正在寻找可以在系统上执行的故障排除步骤,而无需打扰开发团队。
附加信息:
OS: RHEL 5.6
PHP: 5.3
Drupal: 6.x
MySQL: 5.6
仅供参考,我们已经意识到交换问题,我们正在单独研究该问题,这与交换开始发生之前观察到的内存泄漏无关。
memcached
库。根据memcache管理页面memcache.php
,我们只能看到我们已经分配5GB
给了3.3GB
正在使用的memcache 。如果您可以在这里进一步协助我们,那就太好了。
memcached
守护进程本身可能还不错。这是PHP内存缓存库,它可能会或可能不会泄漏内存(从而增加Apache进程的内存使用量)。我的问题大约在1-2年前,所以在那之后可能已经解决了。无论如何,如果您不是必须要使用memcached,请尝试将其禁用一会儿,看看Apache内存使用量是否仍在增长。
httpd
,内存使用量将不断增长,并且由于某些内存不足内核消息而最终崩溃。性能良好(直到内存使用率接近内存限制)。请忽略交换问题。