Load和CPU利用率
来源:互联网 发布:古诗欣赏的软件 编辑:程序博客网 时间:2024/06/07 19:23
首先,top
命令是没有计算load的平均值的,top
命令只不过是在不停的从/proc/loadavg
文件来读取load的平均值.(strace
显示top
命令会打开/proc/loadavg
并且会定期从中读取load的平均值信息).当使用man proc
的时候,会有如下说明:
/proc/loadavg
该文件的前三个属性,分别表示在1分钟,5分钟和15分钟内,任务队列中进程的平均个数.
任务需保证:
- 进程状态是R
- 进程在等待磁盘IO,状态是D
这3个数字也可以通过一些其他的命令来获取,比如
uptime
等命令.而第四个属性包括两个数字,以/
分开.第一个数字是当前内核调度实体的数量(进程,线程);这个数字会低于或者等于CPU的个数.而/
后面的数字表示在当前系统中存在的内核调度实体个数.第5个属性则是操作系统最常创建进程的PID.
所以说,load average
只是表示运行队列中运行任务的多少.并且,开发者从top
中只能看到1分钟,5分钟和15分钟的平均值.如果开发者运行cat /proc/loadavg
那么将会看到文件中的其它属性值.
前面描述的load average
的描述是来自于man
的,但是其实经过测试,貌似并非十分准确.我写了一个简单的java程序来创建256个线程,代码如下:
import java.lang.Thread;import java.lang.Runnable;public class test { public static void main(String[] args) { int n = 256; for (int i = 0;i<n;i++) { new Thread(new Runnable() { @Override public void run() { while(true){ } } }).start(); } }}
当实际执行的过程中,再执行了cat /proc/loadavg
的时候,返回的结果如下:
71.41 18.25 6.28 264/928 26598
而这台服务器本身只是虚拟机,如下为cat /proc/cpuinfo
的值:
processor : 0vendor_id : GenuineIntelcpu family : 6model : 45model name : Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHzstepping : 7cpu MHz : 2199.885cache size : 15360 KBphysical id : 0siblings : 1core id : 0cpu cores : 1apicid : 0initial apicid : 0fpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat clflush mmx fxsr sse sse2 ht syscall nx lm up rep_good unfair_spinlock pni ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lmbogomips : 4399.77clflush size : 64cache_alignment : 64address sizes : 46 bits physical, 48 bits virtual
本身只有单CPU,单核,而实际上,264这个数字很明显是高于这个值的.所以之前对于/proc/loadavg
的第四个属性描述不是很正确.这个属于load average
的一个描述错误.
在proc的manual page中,对于loadavg第四个属性的
/
左边的数值描述是错误的.该值表示的是当前的执行调度实体,所以就预测其值应该不高于当前CPU的个数.这和其实现并不相符,该值其实表示的是当前的runnable
线程.
Q:现在来了个问题,当load平均值是7的时候,有4个超线程的CPU内核,是不是意味着CPU的利用率在7/8?
A:答案是否定的,load平均值为7只是表示在当前的执行队列中有7个运行进程.
Q:那么为什么其显示为50%id?这种情况怎么会出现一般时间的CPU空闲?
A:因为load average
并不意味着CPU的占比.开发者的线程只是使用了50%的CPU,而另外50%的CPU在做其他事情罢了.
- Load和CPU利用率
- 压力测试--CPU利用率和Load Average
- 关于CPU利用率和Load Average负载
- 关于CPU利用率和Load Average负载
- CPU利用率和Load Average的区别
- 性能测试指标:CPU Load和CPU利用率的关系
- 性能测试指标:CPU Load和CPU利用率的关系
- Load和CPU利用率是如何算出来的
- Load和CPU利用率是如何算出来的
- [进程管理]Load和CPU利用率是如何算出来的
- Load和CPU利用率是如何算出来的
- Load和CPU利用率是如何算出来的
- cpu利用率和cpu 队列
- CPU利用率与Load Average的区别?
- CPU利用率与Load Average的区别?
- 计算cpu利用率和内存利用率
- 关于CPU负载和CPU利用率
- 系统平均负载(Load average)与CPU利用率
- Java 源程序与编译型运行区别
- stm32 待机模式
- Gradle 多项目管理
- 快速排序(quick sort) C ~
- elasticsearch
- Load和CPU利用率
- hpu1415——小ho的01串
- C可变参数的实现
- 24点运算
- 认识 Fields marshal marshal_with
- HDU-2017"百度之星"程序设计大赛-初赛(B)-1001-Chess
- 2017百度之星初赛B场第一题Chess--简单杨辉三角问题
- Pinyin4j之Pinyin4jUtils工具类
- ReactNative开发(一)之开发环境搭建