Max*_*Max 17 linux php memory drupal apache-2.2
我们正在运行一个执行财务建模的大型 Drupal 网站。考虑到 apache 使用的内存超时增加而 apache 进程数保持稳定,我们似乎遇到了某种内存泄漏:


我们知道内存问题来自 apache/PHP,因为每当我们发出/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_limit512MB的 PHP ,这解释了高内存使用量与低请求量的区别,以及max_execution_time120 秒的时间,它应该终止执行时间更长的线程,因此应该防止内存使用量的不断增长。看到。
问:我们如何调查导致此内存泄漏的原因?
理想情况下,我正在寻找可以在系统上执行的故障排除步骤,而不必打扰开发团队。
附加信息:
OS: RHEL 5.6
PHP: 5.3
Drupal: 6.x
MySQL: 5.6
Run Code Online (Sandbox Code Playgroud)
仅供参考,我们知道我们正在单独调查的交换问题,与我们在交换开始发生之前观察到的内存泄漏无关。
sym*_*ean 10
我们知道内存问题来自 apache/PHP,因为每当我们发出 /etc/init.d/httpd 重新加载内存使用量下降
不 - 这只是意味着它与网络流量有关。您继续提到您正在机器上运行 mysql - 大概是管理网络服务器的数据 - 它很容易成为这里的罪魁祸首。与您的 webstack 使用的其他服务一样,您没有提到。
每个 apache 线程都分配了一个 512MB 的 PHP memory_limit,这解释了
不,它没有。您报告平均有 7 个,最多有 25 个繁忙的服务器 - 但您的内存图显示大约 25Gb 的增量。
真的,您应该重新开始进行基本的 HTTP 调整 - 您似乎一直在运行 256 个 httpds,但您的峰值使用量为 25 - 这简直是愚蠢的。
和 120 秒的 max_execution_time 应该终止执行时间更长的线程
否 - 仅当执行线程在 PHP 解释器中时 - 如果 PHP 被阻塞,则不会。
执行财务建模
(叹)
如果您提供有关如何配置 Apache、线程或 prefork、版本、PHP 的调用方式(模块、cgi、fastcgi)、是否使用持久连接、是否使用存储过程的详细信息,将会很有帮助。
我建议您首先将 mysql 移到单独的机器上并停止使用持久连接(如果您当前正在使用它们)。将内存限制设置得低得多,并在每个脚本的基础上覆盖它。确保您已经安装并配置了循环引用垃圾收集器。
| 归档时间: |
|
| 查看次数: |
42138 次 |
| 最近记录: |