摘要:不可中断状态实际上是系统对进程和硬件设备的一种保护机制既然平均的是活跃进程数,那么最理想的就是每个上正好运行着一个进程,每个进程都得到了充分的利用。
理解平均负载 概念
平均负载指的是单位时间内(1,5,15分钟)系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
可运行状态: 正在使用CPU或者等待CPU的进程,也就是通过ps aux看到的状态为R的进程
不可中断状态: 正处于内核关键流程中的进程,并且这些流程是不可被打断的,比如IO响应。也就是通过ps aux看到的状态为D的进程。
不可中断状态实际上是系统对进程和硬件设备的一种保护机制
既然平均的是活跃进程数,那么最理想的就是每个CPU上正好运行着一个进程,每个进程CPU都得到了充分的利用。
平均负载多少为合理首先要知道你的系统是多少核的CPU
[root@www ~]# grep "model name" /proc/cpuinfo | wc -l 4
其次根据平均负载(每个核心为1作为最高标准去判断)的三个趋势时间去判断变化率,从而总结出对应的负载情况:一般超过70%的话就算是比较高了
平均负载和CPU使用率CPU使用率:单位时间内CPU繁忙成都的统计,跟平均负载不是一一对应的
CPU密集型进程,使用大量的CPU会导致平均负载和CPU使用率平均负载案例分析
IO密集型进程,等待IO也会导致平均负载升高,但是CPU使用率不一定很高
大量等待CPU的进程调度也会导致平均负载升高,此时的CPU使用率也会比较高
准备环境
OS:linux
软件需求:stress sysstat
测试命令:stress 压力测试
mpstat cpu性能分析工具 pidstat 进程性能分析工具
需要打开三个终端:作为压测命令端,负载观察端,进程观察端
场景一:CPU密集型进程
终端一:查看当前平均负载&执行压测命令
[root@www ~]# uptime 15:08:02 up 84 days, 23:20, 1 user, load average: 0.00, 0.01, 0.05 [root@www ~]# stress --cpu 1 --timeout 600 #十分钟测试
终端二:观察平均负载变化情况
[root@www ~]# watch -d uptime
终端三:mpstat查看CPU使用率变化情况和占用cpu的进程
[root@www ~]# mpstat -P ALL 5 #抓取CPU的变化率 (5秒输出一组数据) [root@www ~]# pidstat -u 5 1 #抓取占用CPU的进程(5秒输出一组数据)
场景二:IO密集型进程
终端一:查看当前平均负载&执行压测命令
[root@www ~]# uptime 15:08:02 up 84 days, 23:20, 1 user, load average: 0.00, 0.01, 0.05 [root@www ~]# stress --cpu 1 --timeout 600 #十分钟测试
终端二:观察平均负载变化情况
[root@www ~]# watch -d uptime
终端三:mpstat查看CPU使用率变化情况和占用cpu的进程
[root@www ~]# mpstat -P ALL 5 #抓取CPU的变化率 (5秒输出一组数据) [root@www ~]# pidstat -u 5 1 #抓取占用CPU的进程(5秒输出一组数据)
场景三:大量进程场景
终端一:查看当前平均负载&执行压测命令
[root@www ~]# uptime 15:08:02 up 84 days, 23:20, 1 user, load average: 0.00, 0.01, 0.05 [root@www ~]# stress -c 8 --timeout 600 #八个进程模拟,十分钟测试
终端二:观察平均负载变化情况
[root@www ~]# watch -d uptime
终端三:mpstat查看CPU使用率变化情况和占用cpu的进程
[root@www ~]# mpstat -P ALL 5 #抓取CPU的变化率 (5秒输出一组数据) [root@www ~]# pidstat -u 5 1 #抓取占用CPU的进程(5秒输出一组数据)小结归纳
平均负载是一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身我们并不能直接发现到底是哪里出了瓶颈,在理解平均负载的时候我们也要注意:
平均负载高可能是CPU密集型进程导致的
平均负载高不一定代表CPU使用率高,还有可能是IO更加繁忙了
当发现负载较高的时候可以使用mpstat、pidstat等工具来辅助分析
来源整理自https://time.geekbang.org/col...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/46124.html
摘要:线程允许同一个进程中同时存在多个程序控制流。线程也被称为轻量级进程。现代操作系统中,都是以线程为基本的调度单位,而不是进程。 并发简史 在早期的计算机中不包含操作系统,从头至尾都只执行一个程序,并且这个程序能访问计算机所有资源。操作系统的出现使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行:操作系统为各个独立执行的进程分配内存、文件句柄、安全证书等。不同进程之间通过一些...
摘要:实战读书笔记第一章从方法传递到接着上次的,继续来了解一下,如果继续简化代码。去掉并且生成的数字是万,所消耗的时间循序流并行流至于为什么有时候并行流效率比循序流还低,这个以后的文章会解释。 《Java8实战》-读书笔记第一章(02) 从方法传递到Lambda 接着上次的Predicate,继续来了解一下,如果继续简化代码。 把方法作为值来传递虽然很有用,但是要是有很多类似与isHeavy...
摘要:大家好,我是冰河有句话叫做投资啥都不如投资自己的回报率高。马上就十一国庆假期了,给小伙伴们分享下,从小白程序员到大厂高级技术专家我看过哪些技术类书籍。 大家好,我是...
摘要:正确使用并行流错用并行流而产生错误的首要原因,就是使用的算法改变了某些共享状态。高效使用并行流留意装箱有些操作本身在并行流上的性能就比顺序流差还要考虑流的操作流水线的总计算成本。 一、并行流 1.将顺序流转换为并行流 对顺序流调用parallel方法: public static long parallelSum(long n) { return Stream.iterate(1L...
摘要:依旧使用刚刚对苹果排序的代码。现在,要做的是筛选出所有的绿苹果,也许你会这一个这样的方法在之前,基本上都是这样写的,看起来也没什么毛病。但是,现在又要筛选一下重量超过克的苹果。 《Java8实战》-读书笔记第一章(01) 最近一直想写点什么东西,却不知该怎么写,所以就写写关于看《Java8实战》的笔记吧。 第一章内容较多,因此打算分几篇文章来写。 为什么要关心Java8 自1996年J...
阅读 2080·2021-09-23 11:52
阅读 1726·2021-09-02 15:41
阅读 2907·2019-08-30 10:47
阅读 1895·2019-08-29 17:14
阅读 2042·2019-08-29 16:16
阅读 3099·2019-08-28 18:29
阅读 3289·2019-08-26 13:30
阅读 2477·2019-08-26 10:49