服务器宕机原因排查思路
作为运维工程师来说,日常工作中肯定会遇到服务器宕机的问题,除了快速恢复业务之外,排查宕机原因有时候也很麻烦,以下是自己对宕机可能的原因及排查思路的一个简单总结,比较常规,还不涉及系统参数配置的优化,仅供参考,后续有新的思路会再补充。
1.真假死机
真死机
服务器确确实实宕机了,导致服务不可用,无法访问。
假死机
由于硬件资源暂时性地被消耗殆尽,因而无法对外部指令进行响应的现象,比如CPU和内存被占满,表明有软件正在大量的占用服务器的内存和CPU,或者网站处于访问高峰期,带宽资源跑满等,这时只需要等待一定的时间,待服务器腾出更多的硬件资源即可恢复正常,如果长时间恢复不了,可能需要我们手动处理下,比如杀死进程。
那么,如何解决这个问题呢?第一,要从网站着手,看看是不是网站程序有不合理的地方,数据查询,是否有死循环。尽可能的用html静态网页显示,减轻数据库的压力。第二,升级服务器硬件配置,例如:加大服务器内存,升级服务器CPU,加大服务器带宽,这样就可以解决服务器假死机的问题。
2.宕机可能原因
- 访问量过高,超出系统承载能力,包括正常的短暂性突增,或者异常访问,比如黑客攻击等;
- 服务器配置过低,导致即便访问量不算太高也超出了系统承载能力,需要提高配置;
- 应用程序本身存在bug,比如死循环,消耗系统资源的逻辑导致资源耗尽;
- 某些系统参数配置不合理,比如fd个数或允许连接数过低等;
- 多线程造成的死锁现象,互相等待对方释放资源;
- 服务器硬件故障,比如内存故障,需要更换;
- 系统内核bug,比如软死锁等,需要升级内核;
- 当然,也有可能是人为误操作导致的;
3.排查思路
首先判断是真死还是假死,如果假死,那等一段时间或手动杀死进程即可,如果真死则需要进一步排查;
查看系统日志 /var/log/messages,分析宕机时间前后的系统日志,看看是否有明显的报错,比如oom或内核bug;
如果启用了kdump,也可以查看宕机生成的crash文件,默认/var/crash目录下,注意生成时间是否对应;
查看监控数据,在宕机前有没有指标异常,比如CPU或内存突增,可能短暂突发上量超过系统承载能力;
也有可能是硬件故障,可以看下/var/log/dmesg,或者登录远控查看系统日志,比如内存故障等,可能需要更换;
4.如何处理
首先恢复业务、
分析问题,排查原因、
制定解决方案、
完善监控,及时发现、
复盘总结,避免再次发生,
经验积累,知识库
5.没有办法的办法
万能的重启
所有日志文件
/var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。 /var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们 /var/log/boot.log — 包含系统启动时的日志。 /var/log/daemon.log — 包含各种系统后台守护进程日志信息。 /var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。 /var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。 /var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。 /var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。 /var/log/user.log — 记录所有等级用户信息的日志 /var/log/Xorg.x.log — 来自X的日志信息 /var/log/alternatives.log – 更新替代信息都记录在这个文件中 /var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“ /var/log/cups — 涉及所有打印信息的日志 /var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中 /var/log/yum.log — 包含使用yum安装的软件包信息 /var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中 /var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里 /var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等 /var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中 /var/log/httpd/或/var/log/apache2 — 包含服务器access_log和error_log信息 /var/log/lighttpd/ — 包含light HTTPD的access_log和error_log /var/log/mail/ – 这个子目录包含邮件服务器的额外日志 /var/log/prelink/ — 包含.so文件被prelink修改的信息 /var/log/audit/ — 包含被 Linux audit daemon储存的信息 /var/log/samba/ – 包含由samba存储的信息 /var/log/sa/ — 包含每日由sysstat软件包收集的sar文件 /var/log/sssd/ – 用于守护进程安全服务