我在 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 主机都喜欢启用内存过量使用)。