Linux系统CPU使用率和负载高如何排查?

64阅读
0评论
0点赞

本文提供了轻量应用服务器中高CPU使用率或负载问题的排查指南,包括定位问题进程的方法、常用命令如vmstat和top的使用技巧以及针对不同情况的案例分析。

操作场景

在使用轻量应用服务器实例时,您可能会遇到 CPU 使用率或 CPU 负载持续偏高的情况。本指南将指导您如何排查这些问题。

步骤概述

  1. 定位问题进程:找到导致 CPU 使用率或负载过高的具体进程。
  2. 分析并处理
    • 正常进程:考虑优化程序或升级实例配置,参见升级配置
    • 异常进程:手动终止或使用第三方安全工具处理。

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 键:按内存使用情况排序进程。

终止进程

  1. top 命令执行过程中,输入小写字母 k
  2. 输入想要终止的进程 PID 并按 Enter 键。

Image

Image

常见案例分析

案例一:CPU 使用率较低但负载较高

问题现象:CPU 使用率不高,但 CPU 负载非常高。

Image

问题原因:可能是僵尸进程过多导致。 解决方案:使用 ps -axjf 命令检查是否存在不可中断的睡眠状态 (D+) 进程。

Image

案例二:kswapd0 进程占用 CPU 较高

问题现象:轻量应用服务器运行卡顿,kswapd0 进程占用大量 CPU。 Image 问题原因:系统正在进行频繁的换页操作。 解决方案:调整 vm.swappiness 内核参数来控制交换空间的大小。

cat /proc/sys/vm/swappiness

查看swap

根据业务需要调整,如在sysctl.conf文件中,修改vm.swappiness = 10

vi /etc/sysctl.conf

重载配置,使其生效

sysctl -p

案例三:CPU 使用率高达 100%

问题现象:无法通过 tophtop 命令查询到消耗 CPU 资源的具体进程。 问题原因:可能是病毒导致。 解决方案

  1. 查看 CPU 使用率达到 100% 的具体时间点,参见查看实例监控信息
  2. 检查系统命令是否被修改。
    stat /usr/bin/top

    CommandChanges

分别执行

    rpm -Vf /bin/ps
    rpm -Vf /usr/bin/top
  • 正常情况下,系统无返回修改信息。
  • 系统异常情况下,显示类似如下,表示pstop命令被修改过。

CommandQuery

  1. 检查 IP 地址是否解析到异常域名。

    iftop -i [$Device] -n -P

    [$Device]为当前系统使用的网卡,如eth0。 系统显示类似如下,若您没有连接过crypto-pool.fr,则是异常域名 Image

  2. 如果确定被病毒感染,备份数据并重新初始化系统盘,使用云安全中心进行安全加固。

    1. 备份轻量应用服务器实例。请参见创建快照
    2. 重新初始化系统盘,使用云安全中心对轻量应用服务器实例进行安全加固。请参见重置系统基础安全服务
评论(0)
暂无评论,期待您的发言...
发表评论