分析高负载根本原因

分析高负载根本原因

这是一个在 vmware 5.5 中运行的 5.7 32 位虚拟机。主持人。我发现平均负载值较高,CPU 使用率较低。该虚拟机有 4 个 vCPU,负载有时会达到 20 个。

当我运行 vmstat 时,我在“r”列中看到较高的值。

问题是我如何找到内核运行队列中的进程?

我尝试过在互联网上找到的任何 ps 组合,但没有运气,比如 ps r -A

vmstat 输出:

[ ~]# vmstat 1 10
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 9  0      8 822516 322880 1593592    0    0     1    65    9    6  1  1 98  0  0
 7  0      8 823136 322880 1593584    0    0     0     0 9387 97411  8  9 84  0  0
53  0      8 823508 322880 1593588    0    0     0   236 8332 108913  9 12 79  0  0
64  0      8 818424 322888 1597548    0    0     0   116 9027 140988 10 11 79  0  0
69  0      8 820284 322888 1597548    0    0     0     0 9095 128715  8 10 83  0  0
64  0      8 820284 322888 1597692    0    0     0     0 8701 119305  9 11 80  0  0
 3  0      8 819540 322888 1597688    0    0     0  4704 9531 112734  8  8 84  0  0
81  0      8 818052 322888 1599452    0    0     0   224 8324 102409 10 13 77  0  0
 8  0      8 816192 322888 1601788    0    0     0  3240 9181 98478  9 11 80  0  0
 7  0      8 815076 322888 1601872    0    0     0     0 9250 104422 10  9 81  0  0 mpstat 1 10
06:04:03 PM  CPU    usr     nice    sys     iowait  irq     soft    steal   guest  idle
06:04:04 PM  all    9.32    0.00    8.82    0.00    0.25    4.03    0.00    0.00   77.58
06:04:05 PM  all    9.85    0.00    8.84    0.00    0.25    4.29    0.00    0.00   76.77
06:04:06 PM  all    8.29    0.00    5.78    0.00    0.50    4.77    0.00    0.00   80.65
06:04:07 PM  all    9.82    0.00    7.81    0.00    0.25    4.28    0.00    0.00   77.83
06:04:08 PM  all    8.84    0.00    5.30    0.00    0.25    4.29    0.00    0.00   81.31
06:04:09 PM  all   10.05    0.00    9.05    0.00    0.50    4.02    0.00    0.00   76.38
06:04:10 PM  all    9.60    0.00    7.32    0.00    0.51    4.04    0.00    0.00   78.54
06:04:11 PM  all    8.33    0.00    5.81    0.00    0.25    4.29    0.00    0.00   81.31
06:04:12 PM  all    9.57    0.00    7.05    0.00    0.25    4.03    0.00    0.00   79.09
06:04:13 PM  all    7.83    0.00    5.05    0.00    0.25    3.79    0.00    0.00   83.08
Average:     all    9.15    0.00    7.08    0.00    0.33    4.18    0.00    0.00   79.25

答案1

通常平均负载是因为很多东西都需要 CPU,但并非总是如此。一个常见的罪魁祸首是等待 IO 的进程——磁盘或网络。

尝试运行ps -e v并查找进程状态标志。

state    The state is given by a sequence of characters, for example, "RWNA". The      first character indicates the run state of the process:
D    Marks a process in disk (or other short term, uninterruptible) wait.
I    Marks a process that is idle (sleeping for longer than about 20 seconds).  
L    Marks a process that is waiting to acquire a lock.
R    Marks a runnable process.
S    Marks a process that is sleeping for less than about 20 seconds.
T    Marks a stopped process.
W    Marks an idle interrupt thread.
Z    Marks a dead process (a "zombie").

这是来自ps联机帮助页,因此您可以在那里找到更多详细信息 -R并且D流程可能特别令人感兴趣。

答案2

top 是我所知道的最好的工具,可以用来查找哪些进程正在使用系统资源。

在我的机器上:

$ top
top - 14:14:00 up 1 day,  2:00,  4 users,  load average: 0.24, 0.23, 0.24
Tasks: 235 total,   3 running, 232 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.2 us,  0.5 sy,  0.0 ni, 96.2 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   7870416 total,  7097428 used,   772988 free,   346524 buffers
KiB Swap:  8081404 total,        0 used,  8081404 free.  3621000 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                
 4669 postgres  20   0 2037632  63924  37168 S  19.3  0.8   0:29.23 postgres                                                               
 4671 postgres  20   0 2037592  64476  38532 S  12.8  0.8   0:25.71 postgres                                                               
 4672 postgres  20   0 2037452  62992  38004 S  12.8  0.8   0:25.36 postgres                                                               
 1324 root      20   0  766268 212364 173952 S   6.4  2.7  22:34.20 Xorg                                                                   
 3804 ybounya   20   0  656468  23560  13244 S   6.4  0.3   1:44.77 gnome-terminal                                                         

所以你可以看出,当前 PID 4669 (postgres) 使用了 19.3%,4671 使用了 12.6%,依此类推。您还可以查看内存和其他关键资源。

相关内容