目 录CONTENT

文章目录

CPU运行队列

简中仙
2023-02-27 / 0 评论 / 0 点赞 / 70 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2023-10-07,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

在Linux里,一个进程,对于线程来说要不在运行,要不在阻塞。

每个CPU都会维持一个运行队列,理想情况下,调度器会不断让队列中的进程运行。进程不是处在sleep状态就是run able状态。CPU只会运行处于runnable状态的线程,不是线程越多CPU就越忙,如果CPU过载,就会出现调度器跟不上系统的要求,导致可运行的进程会填满队列。队列愈大,程序执行时间就愈长。

runnable(可运行)状态,意味着他正在和其他数据运行状态的进程竞争CPU的时间,谁的优先级越高CPU给他的时间就稍微多点。怎么知道优先级呢,在时间上会有点区别。

运行状态的进程,不一定正在使用CPU,如5个在排队。同一时刻可能只有一个人在用这个资源。Linux调度器会决定去运行哪个进程。他会从运行状态的进程列表里面去提取他要运行的哪些进程。

队列:当这些进程是运行状态,等待CPU处理的任务数就叫运行队列。任务越多队列越长,运行队列越长表示我的压力机就越大。

队列多少比较合适呢:在任何一个时刻CPU的一个核同一时刻只能处理一个线程。如果CPU有4个核,同一时刻处理4个任务,这个队列最好是4.。队列最好等于内核个数,最好不要超过你内核个数的3倍。

队列包含正在得到CPU运行的那个线程。

# uptime
 09:51:12 up 324 days, 23:01,  1 user,  load average: 0.32, 0.30, 0.32

"load average" 用来表示运行队列,用top 命令我们可以看到CPU一分钟,5分钟和15分钟内的运行队列的大小。这个值越大表明系统负荷越大。

# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 565760 695564 24525440    0    0     0    24    0    0  2  1 96  0  0

r表示运行队列的大小,r的参考值是:小于4,队列大于4时,表明系统的cpu或内存可能有问题,如果r经常大于4,且id经常少于40,表示cpu的负荷很重。当队列变长时,队列中进程在等待cpu调度执行时所花的时间会变长。

id参考值: 大于40,如果r经常大于4,且id经常小于40,表示cpu的负荷很重。

wa 参考值:小于25%,超过25%的wa的值可以表示磁盘子系统可能没有被正确平衡,也可能是磁盘密集工作负载的结果,系统的磁盘或其它I/o可能有问题,可以通过iostat/SAR –C命令进一步分解分析。

top - 09:54:46 up 416 days, 21:50,  1 user,  load average: 0.32, 0.27, 0.32
Tasks: 288 total,   1 running, 287 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.3 us,  2.3 sy,  0.0 ni, 95.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 64757900 total,  1637052 free, 47836680 used, 15284168 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 16345440 avail Mem

对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;

如果CPU在满负荷运行,应该符合下列分布,

a) User Time:65%~70%, us过大,说明有用户进程占用很多cpu时间,需要进一步的分析其它软硬件因素。

b) System Time:30%~35%,sy过大,说明系统管理方面花了很多时间,说明该系统中某个子系统产生了瓶颈,需要进一步分析其它软硬件因素。

c) User Time+System Time ,合理值范围是 60-85%,如果在一个多用户系统中us+sy时间超过85%,则进程可能要花时间在运行队列中等待,响应时间和业务吞吐量会受损害

d) Idle:0%~5%, CPU完全空闲的百分比

0
cpu

评论区