Linux系统CPU使用率和负载高如何排查?
87阅读
0评论
0点赞
本文提供了轻量应用服务器中高CPU使用率或负载问题的排查指南,包括定位问题进程的方法、常用命令如vmstat和top的使用技巧以及针对不同情况的案例分析。
操作场景
在使用轻量应用服务器实例时,您可能会遇到 CPU 使用率或 CPU 负载持续偏高的情况。本指南将指导您如何排查这些问题。
步骤概述
- 定位问题进程:找到导致 CPU 使用率或负载过高的具体进程。
- 分析并处理:
- 正常进程:考虑优化程序或升级实例配置,参见升级配置。
- 异常进程:手动终止或使用第三方安全工具处理。
CPU 负载查询与分析
常用命令
- vmstat
- top
- ps -aux
- ps -ef
vmstat 命令
vmstat
命令用于从系统层面监控虚拟内存、进程和 CPU 的整体状态。
基本语法:
vmstat [-n] [delay [count]]
[-n]
:仅在开始时显示一次各字段名称。[delay]
:刷新时间间隔。[count]
:刷新次数。
示例:
vmstat -n 1 4
输出解释:
r
:等待处理的线程数,数值越大,表示运行越慢。us
:用户模式消耗的 CPU 时间百分比。sy
:内核模式消耗的 CPU 时间百分比。wa
:I/O 等待消耗的 CPU 时间百分比,数值较高时,可能是磁盘性能出现瓶颈。id
:空闲状态的 CPU 时间百分比,如果持续为0,且sy是us的两倍,说明CPU资源短缺。
返回
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2684984 310452 2364304 0 0 5 17 19 35 4 2 94 0 0
0 0 0 2687504 310452 2362268 0 0 0 252 1942 4326 5 2 93 0 0
0 0 0 2687356 310460 2362252 0 0 0 68 1891 4449 3 2 95 0 0
0 0 0 2687252 310460 2362256 0 0 0 0 1906 4616 4 1 95 0 0
top 命令
top
命令是一个实时显示系统中各进程资源占用情况的强大工具。
基本语法:
top [-n] [-d]
[-n]
:仅在开始时显示一次各字段名称。[-d]
:刷新时间间隔。
示例:
top -n 5 -d 2
top - 17:27:13 up 27 days, 3:13, 1 user, load average: 0.02, 0.03, 0.05
Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.1 st
KiB Mem: 1016656 total, 946628 used, 70028 free, 169536 buffers
KiB Swap: 0 total, 0 used, 0 free. 448644 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 41412 3824 2308 S 0.0 0.4 0:19.01 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd
输出解释:
- 第一行显示系统当前时间、运行时间、登录用户数和系统负载。
- 第三行显示当前 CPU 资源的总体使用情况。
交互式命令
- P 键:按 CPU 使用率倒序排列进程。
- M 键:按内存使用情况排序进程。
终止进程
- 在
top
命令执行过程中,输入小写字母k
。 - 输入想要终止的进程 PID 并按 Enter 键。
常见案例分析
案例一:CPU 使用率较低但负载较高
问题现象:CPU 使用率不高,但 CPU 负载非常高。
问题原因:可能是僵尸进程过多导致。
解决方案:使用 ps -axjf
命令检查是否存在不可中断的睡眠状态 (D+
) 进程。
案例二:kswapd0 进程占用 CPU 较高
问题现象:轻量应用服务器运行卡顿,kswapd0
进程占用大量 CPU。
问题原因:系统正在进行频繁的换页操作。
解决方案:调整 vm.swappiness
内核参数来控制交换空间的大小。
cat /proc/sys/vm/swappiness
根据业务需要调整,如在sysctl.conf文件中,修改vm.swappiness = 10
vi /etc/sysctl.conf
重载配置,使其生效
sysctl -p
案例三:CPU 使用率高达 100%
问题现象:无法通过 top
或 htop
命令查询到消耗 CPU 资源的具体进程。
问题原因:可能是病毒导致。
解决方案:
- 查看 CPU 使用率达到 100% 的具体时间点,参见查看实例监控信息。
- 检查系统命令是否被修改。
stat /usr/bin/top
分别执行
rpm -Vf /bin/ps
rpm -Vf /usr/bin/top
- 正常情况下,系统无返回修改信息。
- 系统异常情况下,显示类似如下,表示
ps
和top
命令被修改过。
评论(0)
暂无评论,期待您的发言...
发表评论