弄清楚服务器崩溃的“谁、什么、何时和为什么”

弄清楚服务器崩溃的“谁、什么、何时和为什么”

目前,我是大学的 Moodle 管理员,我的职责之一是确保服务器始终运行正常。有时,Apache 或/和 MySQL 会毫无原因地崩溃,导致大学内一片混乱。

从广义上讲,当服务器崩溃时,应遵循哪些“基本准则”?我首先应该做什么来找出发生了什么?我如何知道崩溃时(或任何给定时间)有多少用户处于连接状态?我如何知道当前需求需要多少内存或电量?

有很多问题相互关联,但这些是最重要的。显然,我远不是一个经验丰富的系统管理员。我对 Linux 略知一二,如果这有帮助的话。

我们的服务器规格:

  • Intel 双核 Xeon @2.66 GHz(如果我没记错的话)
  • 2 GB 内存
  • 500 GB 硬盘
  • CentOS 5.4
  • MySQL 5.0.45
  • PHP 5.3.12

编辑:抱歉,缺乏信息。

我读过 Apache 和 MySQL 日志,但都没有出现任何重要数据。Apache 日志信息最丰富,只说明崩溃时间,没有其他原因。事实上,Apache 崩溃的错误实际上并不是“错误”,只是重新启动的日志条目 - 最坏的情况是 Apache 发出“SIGTERM”或“SIGKILL”。MySQL 日志什么都没说明。

我通常会尝试使用“top”来跟踪正在发生的事情。当崩溃发生时,很少会消耗掉所有(甚至一半)系统内存。在真正危急的情况下,CPU 使用率已经达到...... 80%?

磁盘和内存使用情况似乎很好(du 和 free 没有问题)。SSH 访问通常很好。只是 MySQL 或 Apache 似乎会随机崩溃,因为即使需求不是那么高,它仍然会挂起。

问题可以简化为“检查什么日志?”“如何检查连接数?”

答案1

通常,您需要先查看系统和应用程序日志,这可能会或可能不会揭示某些信息。如果您有特区工具运行时,您将需要查看导致崩溃的系统统计信息。

当然,检查一些明显的事情总是好的,比如磁盘已满、电源中断、最近的用户登录(也许是其他人输入了“重启”)。

根据崩溃的情况,您可能需要查看控制台以查看显示屏上是否仍有任何转储信息。

如果您在日志中找不到任何明显的信息,您的下一步可能是猜测问题所在,并创建一些脚本来监控系统的这一方面,以便将来获得更多有用的信息。如果您认为连接数可能是问题所在,那么您可能需要定期收集 netstat 或其他东西的输出。

答案2

核心转储文件在这些情况下非常有用。是否有崩溃时的核心转储可用? http://linux.die.net/man/5/core

相关内容