【发布时间】:2012-02-17 05:07:58
【问题描述】:
我们在 Amazon x-large AWS 服务器上托管了许多站点。每当我重新启动 apache 时,我都会运行 top 并查看 apache 进程的数量(6-8),这些进程会迅速将 cpu 百分比和内存百分比提高到 33% cpu,有时是 50% cpu 和每个高达 1.3g 的内存!他们将在 top 停留 10 - 20 分钟,然后另一个将以相同的行为启动。
如果我在其中一个进程上执行 strace,我将得到一个如下所示的无序列表:
access("/etc/localtime", R_OK) = 0
access("/etc/localtime", R_OK) = 0
access("/etc/localtime", R_OK) = 0
access("/etc/localtime", R_OK) = 0
access("/etc/localtime", R_OK) = 0
...
列表不会停止。如果我让这些进程继续运行,它们最终会停止服务器,我需要重新启动整个虚拟机。
任何人对为什么进程不断访问此文件有任何想法,或者我如何找出为什么会发生这种情况的另一种方法?
【问题讨论】:
-
您是否尝试过删除托管在那里的网站并逐个添加它们,直到出现这种行为?这可能是其中一个网站的错误。
-
这是一种有趣的方法,但不幸的是,我无法在任何时间内关闭这些站点。你认为有一种方法可以跟踪哪个网页/文件是负责任的吗?
-
是的...关闭每个站点,看看它是否修复了它。如果人们抱怨,说这是安全问题。由于您已经在重新启动 Apache,因此您至少已经将它们关闭了一段时间。
-
当我重新启动 apache 时,停机时间是如此之快,以至于没有人注意到。这就是为什么我可以摆脱它。但是,如果这是唯一的方法,那就这样吧,我会在当天晚些时候再试一试。谢谢。
-
我会检查
lsof以获取线索。它可能会显示一个打开的文件(例如,某人损坏的 PHP 脚本)。gdb是另一种方法。顺便说一句,您可以使用 SIGKILL (kill -9) 在不到 10-20 分钟的时间内将它们击倒。另外,检查mod_status和ExtendedStatus。
标签: apache memory memory-leaks process