华为云Linux服务器超负载 & CPU占比100% | 数据库失联 & 网站无法访问调查

引言

某部署于华为云Linux服务器的网站偶发无法访问、数据库连接失败现象,此错误通常发生在网站进行后台操作时,在短时宕机1~3分钟后恢复。经查验此期间服务器CPU占用瞬间飙升100%、资源使用率100%。

伴随php日志如下类型错误:

WARNING: [pool www] child 16996, script '/www/wwwroot/woolio.cn/wp-admin/admin-ajax.php' (request: "POST /wp-admin/admin-ajax.php?action=xunhuweb_cron&i=1") executing too slow (30.669162 sec), logging

服务器监控

可通过开启系列监控调查服务器异常期间进程占用状态,这里将介绍三种监控。

宝塔面板系统监控

通过宝塔面板系统监控可以查看每个时间节点CPU、内存等资源使用占比,以及相对应的高占比进程。
需要注意的是,内存占比数据排除了Buffer和Cache所占内存,服务器实际内存使用率占比更高,实际占比参考下述Agent监控。

华为云Agent系统监控

华为云控制台面板包含Agent系统监控,可为用户提供服务器的系统级、主动式、细颗粒度监控服务。数据采集频率为1分钟1次。除了CPU使用率等指标外,还可以支持内存使用率(Linux)等指标。
可查看请参考以下文档安装:单台主机下安装Agent_云监控服务

Atop工具

Atop工具可以以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,可获取相应的atop日志文件进行分析。待问题复现后我们可以通过该日志来分析具体是哪些进程导致CPU瞬时打满的。
Atop部署安装方式参考以下文档:Atop部署

原因分析

经过分析,服务器异常的原因是内存过高引发linux OOM killer机制,参数panic_on_oom被用来控制该机制在内存不足时的做法。该服务器此参数设置值为0,所以在内存不足时会Kill相关程序,导致网站及数据库宕机。

可通过以下命令查询:

cat /proc/sys/vm/panic_on_oom
  • 值为0:内存不足时,启动 OOM killer。
  • 值为1:内存不足时,有可能会触发 kernel panic(系统重启),也有可能启动 OOM killer。
  • 值为2:内存不足时,表示强制触发 kernel panic,内核崩溃GG(系统重启)。

有关OOM机制的更多内容可参考:Linux之系统参数panic_on_oom – 墨天轮

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注