在 Apache/PHP 中找到内存泄漏


Locate Memory Leak in Apache/PHP

我有一个运行LAMP的网站。 周六,该网站崩溃了。 事实证明,我们专用服务器上的硬盘驱动器(4.5 岁)向南移动。 他们更换了驱动器(更新的操作系统(Cent 5.x,如果有所不同)),我上传了代码(已经完美运行了4 +年)并恢复了数据库(感谢上帝的备份!

突然间,网站周期性地减速到停止。 支持人员报告说,Apache内存不足,它正在扼杀性能。 我可以看到其中一个 apache 线程独占内存(有时超过 50%)。

该系统有很多源代码(肯定粘贴在这里太多了),所以我什至不知道从哪里开始寻找。

注意到的一件事是我最初在 2009 年 1 月设置了服务器。 新硬盘运行的是 PHP 5.3,当时不可用(我假设我们在 5.2 上,但当然我无法检查任何配置...... 是否有一些资源我可以检查?

任何帮助表示赞赏。我很困惑一个运行了4 +年的应用程序如何突然通过移动1版本的PHP而发生巨大变化。

谢谢。

我想

我找到了答案... 我想

经过一番调查,我注意到新上传的文件归:p sacln所有。 原始文件(从挂载的驱动器复制以提高速度)归root:root(我登录的身份)所有。

我将其他文件的所有者更改为,但问题并没有消失。 因此,我将整个目录树更改为:p sacln。 站点停止工作(出现未经授权的访问错误)。 网站根目录的同级文件夹都归:p saserv所有。 所以我将所有者更改为:p saserv(下面的所有子项仍然归:p sacln所有),从那以后就没有问题了。 已经 2 天了,当我监控进程时,我注意到偶尔其中一个 httpd 进程(大约有 12 个)会命中 1.5% 的内存(当我之前遇到问题时,它们通常会达到 40%)。

我真的很好奇为什么会这样(所以我知道如何避免将来),但我不愿意花更多的时间在上面,因为它现在只是花花公子。

任何人都有任何想法,为什么和为什么,我很想听听。 希望这对某人有所帮助!