![为何我的 Apache 服务器老是停止运行?](https://linux22.com/image/530610/%E4%B8%BA%E4%BD%95%E6%88%91%E7%9A%84%20Apache%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%80%81%E6%98%AF%E5%81%9C%E6%AD%A2%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我在 CentOS 上有一个 VPS,它使用 Apache 来托管我的 Rails 网站。
每隔几天我就会发现 Web 服务器停止运行。我必须登录并重新启动它。
据我所知,我的错误日志为 0 字节,因此没有报告任何错误。从访问日志中,我看不到任何流量高峰。我的网站本来就不受欢迎……每天大概只有 1-5 次访问!
我不知道该去哪里查找。我怎样才能找出问题所在?
答案1
最有可能的情况是内存不足,内核正在终止 httpd。您是否在系统日志中看到 OOM 消息?(不仅仅是 apache 日志。)
答案2
正常运行的 Apache 错误日志永远不会为空 - 只要您配置了日志级别 Notice 及以上,每次服务器启动时您都应该收到写入错误日志的消息。例如,在 CentOS 上安装时,新错误日志如下所示:
[Sun Nov 14 04:02:05 2010] [notice] Digest: generating secret for digest authentication
[Sun Nov 14 04:02:05 2010] [notice] Digest: done
[Sun Nov 14 04:02:05 2010] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.2 mod_ssl/2.2.15 OpenSSL/0.9.8e-fips-rhel5 configured -- resuming normal operations
我敢打赌,要么是你的日志有误(请仔细检查你的 Apache 配置,而不是假设它是 /var/log/httpd 或其他地方的日志),要么是你的日志出于某种原因无法写入。日志轮换是另一个可能的原因,尽管 logrotate 通常会在完成后重新启动 Apache 进程。
说到 logrotate,您是否发现您的服务在一周中的某一天容易停止?Logrotate 每周运行一次,它向您的 httpd 进程发送的 HUP 可能无法正确重新启动它。
一定要听从 mattdm 的建议并检查 dmesg 中的 OOMkiller 消息,特别是当你使用 VPS 时(大多数 VPS 主机都喜欢启用内存过量使用)。