我的 Web 服务器偶尔会出现莫名其妙的内存峰值(最终崩溃),我不知道是什么原因造成的,也不知道该如何解决。我花了一上午的时间查看错误和访问日志,但没发现任何异常。
我有 3 张图片:
服务器状态图:
顶部:
ps aux:(编辑 - 因为我太新了,所以网站不允许我发布第三篇)
任何有助于解决这个谜团的帮助都将不胜感激。
答案1
您能否将/proc/meminfo
输出粘贴到 pastebin 中。
另外,我不知道您何时拍摄了 top 的快照,但我看到您没有使用任何缓存内存。您知道为什么会这样吗?或者您之前注意到过吗?
/var/log/messages
除此之外,您能否提供事故发生前的相关细节?
顺便说一句,一个 httpd 进程处于 Z 状态,但这不会导致问题。
另外,查看 sar 日志以查看是否可以识别任何内存使用模式。
答案2
您有 2G 的 RAM,并且正在运行 MySQL、Apache 的 HTTPd、qmail、spamd……所有这些都需要内存,因此您需要增加内存并在系统上设置 SWAP。
答案3
找出导致实时服务器内存峰值的原因并非易事。由于您拥有一系列服务,其中任何一个都可能是罪魁祸首,因此这将更加棘手。
为了偷懒,我让 top 在按内存使用情况排序的终端中运行。这样,当服务器崩溃时,它会让我的终端停留在最后一个 top 屏幕,这至少可以告诉我哪个进程可能是罪魁祸首。
然后它与该服务合作,试图找出罪魁祸首。
在我们的案例中,这是由于 PHP 的最大内存设置得太高造成的。
导致问题的原因是,一旦子进程使用了一定量的内存,apache 就不会清除内存,直到该子进程被回收,而这可能在很长时间内都不会发生。
这会积累并最终消耗掉所有的记忆。
我没有使用过 qmail,所以无法评论它的内存使用情况,但 mysql 的默认设置往往使用大约 50m,如您上面所示。
祝你好运