您的当前位置:首页正文

load 与 cpu use

2024-11-09 来源:个人技术集锦
引自一个load 飙到20 (5核), 单cpu idle在80%多的case 。
木名-内核 (09:52:24):
load是采集一个瞬间的运行进程和uninterruptible进程进行计算,cpu利用率是整个时间段的繁忙程度,不是很一样
木名-内核 (09:53:41):
比如在1ms里面,有100us会有5个线程排队处理,其他900us没有,那么你看到的oad可能是5,但是cpu利用率只有10%

 

狄卢 (09:57:51):
那load 分1分 5分 15分 三种值,让人感觉是平均值。但实际上,也是在1分钟之内采集若干个瞬间值做平均?

 

木名-内核 (10:02:35):
是的,系统是每5s采集一次

 

木名-内核 (10:04:13):
大部分情况下,load能够和cpu利用率符合,但是碰到一些特殊的情况,比如刚好每5s采集的时候运行进程很多,其他时间运行进程很少,这个时候load就会和cpu利用率有偏差

 

狄卢 (10:05:25):
哦。。 那这样。。 你昨天看到就是这种进程经常波动的是吧? 进程数量波动从哪里能看处理呢 , 呵呵 我太菜了

 

木名-内核 (10:05:53):
我看的是cat /proc/loadavg里面的
32内核有每个cpu的运行队列,18内核只有这个
0.63 0.77 0.75 1/422 16134

这个里面422前面的1就是当前系统的nr_running

 

狄卢 (10:07:04):
哦, 这个是多长时间采集一次?

 

木名-内核 (10:07:17):
这个是你可以即时的读取
当前读取时刻的

 

狄卢 (10:07:52):
哦哦, 那top里展示的load 也是从这里面计算的?

 

木名-内核 (10:09:10):
嗯,load是根据每次的nr_running + nr_uninterruptible的值进行计算的
这里只是nr_running的,碰到IO的,就需要结合其他的看了
 
另, 关于进程状态: http://www.361way.com/process-status/1798.html

linux系统最常用的命令莫过于ps,经常要用其查看linux的进程和线程情况。此文我们着重来看进程 。进程又分为以下几种状态:

1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

其对应在ps上的相应状态码如下:

状态定义
RRunning.运行中
SInterruptible Sleep.等待调用
DUninterruptible Sleep.等待磁盘IO
TStoped.暂停或者跟踪状态
XDead.即将被撤销
ZZombie.进程已经结束,仅映像名留存
WPaging.内存交换
N优先级低的进程
<优先级高的进程
s进程的领导者
L锁定状态
l多线程状态
+前台进程

平时在查看linux进程状态时,查看最多的三个状态是R  S   D 

R状态,不必多说,R就是running的缩写,即运行中的进程。

S 即 sleep进程,休眠进程。其又分为两种:

D 即上面提到的Uninterruptible Sleep ,如果从广义上来分,D状态算是一种特殊的S状态进程。进程为什么会被置于D状态呢?

D 状态的进程通常是在等待IO,比如磁盘IO,网络IO,其他外设IO,如果进程正在等待的IO在较长的时间内都没有响应,那么就很会不幸地被ps看到了, 同时也就意味着很有可能有IO出了问题,可能是外设本身出了故障,也可能是比如NFS挂载的远程文件系统已经不可访问了。

 
正是因为得不到IO的响应,进程才进入了uninterruptible sleep状态,所以要想使进程从uninterruptible sleep状态恢复,就得使进程等待的IO恢复,比如如果是因为从远程挂载的NFS卷不可访问导致进程进入uninterruptible sleep状态的,那么 可以通过恢复该NFS卷的连接来使进程的IO请求得到满足,除此之外,要想干掉处在D状态进程就只能重启整个Linux系统(D进程并不能通过kill 和kill -9 杀掉) 。
 
显示全文