CPU跑满或跑高
如果服务器上的CPU持续跑高,则会对系统稳定性和业务运行造成影响。以下对CPU占用率较高问题的排查分析做简要说明。
使用vmstat 查看系统纬度的 CPU 负载
您可以通过vmstat从系统维度查看CPU资源的使用情况。
用法说明:
l 命令:
1. vmstat -n 1
2. # -n 1 表示结果一秒刷新一次。
l 示例输出:
l 返回结果中的主要数据列说明:
r:表示系统中 CPU 等待处理的线程。由于 CPU 每次只能处理一个线程,所以,该数值越大,通常表示系统运行越慢。
us:用户模式消耗的 CPU 时间百分比。该值较高时,说明用户进程消耗的 CPU 时间比较多,比如,如果该值长期超过 50%,则需要对程序算法或代码等进行优化。
sy:内核模式消耗的 CPU 时间百分比。
wa:IO 等待消耗的 CPU 时间百分比。该值较高时,说明IO等待比较严重,这可能磁盘大量作随机访问造成的,也可能是磁盘性能出现了瓶颈。
id:处于空闲状态的 CPU 时间百分比。如果该值持续为 0,同时 sy 是 us 的两倍,则通常说明系统则面临着 CPU 资源的短缺。
使用top查看进程纬度的CPU负载
您可以通过top从进程纬度来查看其CPU、内存等资源的使用情况。
用法说明:
l 命令:
1. top
l 示例输出:
l 回显说明:默认界面上第三行会显示当前CPU资源的总体使用情况,下方会显示各个进程的资源占用情况。
可以直接在界面输入大写字母P,来使监控结果按CPU使用率倒序排列,进而定位系统中占用CPU较高的进程。最后,根据系统日志和程序自身相关日志,对相应进程做进一步排查分析,以判断其占用过高 CPU 的原因。
操作案例
使用top直接终止CPU消耗较大的进程
如前面所述,可以通过top命令查看系统的负载问题,并定位耗用较多CPU资源的进程。
您可以直接在top运行界面快速终止相应的异常进程。说明如下:
1.想要终止某个进程,只需按下小写的k键。
2.输入想要终止的进程PID(top输出结果的第一列)。比如,如下图所示,假如想要终止 PID 为 23 的进程,输入 23后按回车。
3. 如下图所示,操作成功后,界面会出现类似 Send pid 23 signal [15/sigterm] 的提示信息让用户进行确认。按回车确认即可。
CPU使用率较低但负载较高
问题描述
Linux 系统没有业务程序运行,通过 top 观察,类似如下图所示,CPU 很空闲,但是 load average 却非常高,如下图所示。
处理办法
load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。出现此种情况时,可能是由于僵死进程导致的。可以通过指令 ps -axjf 查看是否存在 D 状态进程。
D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。
kswapd0 进程占用 CPU 较高
操作系统都用分页机制来管理物理内存,操作系统将磁盘的一部分划出来作为虚拟内存,由于内存的速度要比磁盘快得多,所以操作系统要按照某种换页机制将不需要的页面换到磁盘中,将需要的页面调到内存中,由于内存持续不足,这个换页动作持续进行,kswapd0是虚拟内存管理中负责换页的,当服务器内存不足的时候kswapd0会执行换页操作,这个换页操作是十分消耗主机CPU资源的。如果通过top发现该进程持续处于非睡眠状态,且运行时间较长,可以初步判定系统在持续的进行换页操作,可以将问题转向内存不足的原因来排查。
问题描述
kswapd0 进程占用了系统大量 CPU 资源。
处理办法
Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。而 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。当系统内存不足时,kswapd0 会频繁的进行换页操作。而由于换页操作非常消耗 CPU 资源,所以会导致该进程持续占用较高 CPU 资源。
如果通过 top 等监控发现 kswapd0 进程持续处于非睡眠状态,且运行时间较长并持续占用较高 CPU 资源,则通常是由于系统在持续的进行换页操作所致。则可以通过 free 、ps 等指令进一步查询系统及系统内进程的内存占用情况,做进一步排查分析。
如问题还没有解决,请提交工单请技术帮忙协助排查。
带宽跑满或跑高
对于正常进程导致的带宽跑满或跑高的问题,需要对服务器的带宽进行升级。对于异常进程,有可能是由于恶意程序问题,或者是部分 IP 恶意访问导致,也可能是服务遭到了 CC 攻击。
通常情况下,您可以使用 iftop 工具或 nethogs 查看流量的占用情况,进而定位到具体的进程。
使用iftop工具排查
1.在服务器内部安装iftop流量监控工具。
yum install iftop -y
2.服务器外网带宽被占满时,如果通过远程无法登陆,可通过VNC登录到服务器内部,运行下面命令查看流量占用情况:
iftop -i eth1 –P
注意:-P参数将会显示请求端口。执行 iftop -i eth0 –P命令,可以查看通过服务器哪个端口建立的连接,以及内网流量。举例如下:
在上图中,您可以查看到流量高耗的是服务器上 53139 端口和 115.205.150.235 地址建立的连接。
3. 执行 netstat 命令反查 53139 端口对应的进程。
netstat -tunlp |grep 53139
4.经反查,服务器上 vsftpd 服务产生大量流量,您可以通过停止服务或使用 iptables 服务来对指定地址进行处理,如屏蔽 IP 地址或限速,以保证服务器带宽能够正常使用。
使用nethogs进行排查
1.在服务器内部安装nethogs流量监控工具。
yum install nethogs -y
2.通过nethogs工具来查看网卡上进程级的流量信息,若未安装可以通过yum、apt-get等方式安装。举例如下:
a. 若 eth1 网卡跑满,执行命令 nethogs eth1。
b. 查看每个进程的网络带宽情况以及进程对应的 PID。
c. 确定导致带宽跑满或跑高的具体进程。
3. 若进程确定是恶意程序,可以通过执行 kill -TERM <PID> 来终止程序。
说明:如果是 Web 服务程序,您可以使用 iftop 等工具来查询具体 IP 来源,然后分析 Web 访问日志是否为正常流量。日志分析可以使用 logwatch 或 awstats 等工具进行。
如问题还没有解决,请提交工单联系技术为您处理。