vmstat - cpu 没有完全忙,但有等待进程。这是啥意思?

Posted

技术标签:

【中文标题】vmstat - cpu 没有完全忙,但有等待进程。这是啥意思?【英文标题】:vmstat - cpu not fully busy but there are waiting processes. What does it mean?vmstat - cpu 没有完全忙,但有等待进程。这是什么意思? 【发布时间】:2016-03-09 06:12:52 【问题描述】:

我正在对一个 db2 实例运行一些负载。负载是通过运行 sql 语句的 java 程序生成的。此负载生成器程序正在另一台机器上运行。我正在运行负载生成器的多个 JVM,每个 JVM 都会产生多个线程,这些线程会触发 sql 查询。

在 db2 服务器机器 (AIX 7.1) 上,我运行 vmstat 1 并看到以下输出

kthr    memory              page              faults        cpu    
----- ----------- ------------------------ ------------ -----------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
16  0 2483017 4805102   0   0   0   0    0   0 11481 97937 24610 73  4 23  0
20  0 2483098 4805021   0   0   0   0    0   0 11488 109427 24965 74  5 21  0
18  0 2483015 4805104   0   0   0   0    0   0 12068 103477 25386 75  4 21  0
 0  0 2483015 4805104   0   0   0   0    0   0 12893 105653 22407 75  4 21  0
14  0 2483015 4805104   0   0   0   0    0   0 13239 106536 23097 74  4 21  0
13  0 2483015 4805104   0   0   0   0    0   0 11745 105253 30494 70  4 25  0
16  0 2483015 4805104   0   0   0   0    0   0 9920 93743 33563 59  4 37  0
 4  0 2483015 4805104   0   0   0   0    0   0 10717 91356 28120 62  4 34  0
16  0 2483015 4805104   0   0   0   0    0   0 12023 102409 26877 73  4 23  0
11  0 2483015 4805104   0   0   0   0    0   0 12222 105361 27300 74  4 22  0
17  0 2483015 4805104   0   0   0   0    0   0 13539 109858 25124 75  4 21  0
18  0 2483580 4804539   0   0   0   0    0   0 13808 113410 22928 75  5 21  0
16  0 2483022 4805097   0   0   0   0    0   0 13926 117611 22962 75  5 20  0
14  0 2483022 4805092   0   0   0   0    0   0 13913 111620 23642 74  5 21  0
16  0 2483025 4805085   0   0   0   0    0   0 12969 114079 24493 73  5 22  0
13  0 2483025 4805085   0   0   0   0    0   0 13610 109493 23120 76  5 20  0
16  0 2483025 4805085   0   0   0   0    0   0 12375 103619 24001 74  4 22  0
 9  0 2483025 4805085   0   0   0   0    0   0 13233 108431 23304 75  4 20  0
13  0 2483025 4805085   0   0   0   0    0   0 11975 101451 24412 74  4 22  0

我对“r”列下的高值感到困惑,即使 cpu 没有完全忙。我一直认为“r”列显示的是建立的进程队列(等待引起CPU注意)。但我看了man vmstat。它指出“r”列显示“采样间隔内可运行内核线程的平均数量。可运行线程由准备好但仍在等待运行的线程和已经运行的线程组成。 "

任何人都可以阐明如何找出这些是正在运行的线程还是在等待?如果 CPU 不是 100% 忙,是否会有等待线程?

谢谢。

-- 段落

【问题讨论】:

【参考方案1】:

Parag,如果您查看 vmstat 的手册页详细信息,您会看到以下信息:

r    Average number of runnable kernel threads over the sampling interval.
     Runnable threads consist of the threads that are ready but still waiting to run, and the threads that are already running.

现在您可以看到这是系统上的任何内核线程,这可能是因为您有很多后台进程执行其他操作,而不知道您的系统很难说。

线程分为三种:

内核线程 仅内核线程 用户线程。

内核线程是一个内核实体,类似于进程和中断处理程序;它是系统调度程序处理的实体。内核线程在执行用户函数或库调用时运行在用户态环境中;执行系统调用时切换到内核模式环境。

仅内核线程是仅在内核模式环境中执行的内核线程。仅内核线程由内核模式环境程序员通过内核服务控制。

【讨论】:

你好 D.J.M.C ... 谢谢。是的,r 列显示正在运行+等待的线程数。有什么方法可以查出有多少正在运行和等待? 我必须仔细检查,但如果我记得我曾看到当系统具有低 CPU 值和高虚拟 CPU 时发生这种活动。例如 CPU 0.5 和虚拟 5,因此系统将 CPU 的 0.1 换出 5 次。 CPU 为 0.5 和 Virtual 为 1 将创建更高效​​、更快的系统。

以上是关于vmstat - cpu 没有完全忙,但有等待进程。这是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

Vmstat命令监控Linux资源并将数据通过图形化方式显示

vmstat输出项解释

vmstat命令

系统性能分析-vmstat命令详解

vmstat的几列含义

忙等待中的互斥