Linux性能优化从入门到实战:02 CPU篇:平均负载
每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或 uptime 命令:
$ uptime
22:22:17 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88
// 22:22:17 当前时间 up 2 days, 20:14 系统运行时间 1 user 正在登录用户数
// load average 过去 1 分钟、5 分钟、15 分钟的平均负载
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
不可中断状态的进程,是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。不可中断状态实际上是系统对进程和硬件设备的一种保护机制。
平均负载为多少时合理:在实际生产环境中,一般平均负载应该低于CPU数量的70%才是正常的,否则可能影响进程响应速度。但该值并不是绝对的,最好的方式是将系统的平均负载监控起来,通过更多的历史数据,判断负载的变化趋势。查看CPU个数:grep 'model name' /proc/cpuinfo | wc -l
,平均负载中有三个值,表示三个时间段,可以更全面的了解过去15分钟内的趋势变化。
平均负载 VS CPU使用率:平均负载代表活跃进程数,平均负载高,不意味着CPU使用率高。平均负载是单位时间内,可运行状态和不可中断状态的进程数,包括了正在使用CPU的进程,还包括等到CPU和等待I/O的进程。而CPU使用率是单位时间内CPU繁忙情况的统计。例如:
CPU密集型进程,大量使用CPU,导致CPU使用率和平均负载升高,是一致的;
I/O密集型,等待I/O导致平均负载高,CPU使用率不一定高;
等待CPU进程的调度,导致平均负载高,CPU使用率也高。
CPU密集型进程例程
$ sudo apt install stress-ng sysstat
// stress-ng 系统压测工具 sysstat 性能监控和分析工具:mpstat 多核性能分析、pidstat进程性能分析
$ stress-ng --cpu 1 --timeout 600
// 模拟一个CPU使用率为100%
$ watch -d uptime
11:25:06 up 13:04, 1 user, load average: 0.87, 0.41, 0.18
$ mpstat -P ALL 5
// -P ALL 监控所有CPU,5 每5秒输出一组数据
11时24分50秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11时24分55秒 all 51.38 0.00 0.31 0.00 0.00 0.00 0.00 0.00 0.00 48.32
11时24分55秒 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11时24分55秒 1 1.04 0.00 0.62 0.00 0.00 0.00 0.00 0.00 0.00 98.34
$ pidstat -u 5 1
// 间隔5秒,总共输出1次数据
11时33分10秒 UID PID %usr %system %guest %CPU CPU Command
11时33分15秒 1000 32091 98.60 1.20 0.00 99.80 1 stress-ng-cpu
I/O密集型进程例程
$ stress-ng -i 1 --timeout 600 或 stress-ng -i 1 --hdd 1 timeout 600
// 模拟I/O压力,即不停地执行sync
$ watch -d uptime
11:41:17 up 13:20, 1 user, load average: 0.99, 0.75, 0.44
$ mpstat -P ALL 5 1
11时41分59秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11时42分04秒 all 0.66 0.00 1.31 47.21 0.00 0.00 0.00 0.00 0.00 50.82
11时42分04秒 0 0.62 0.00 1.87 40.96 0.00 0.00 0.00 0.00 0.00 56.55
11时42分04秒 1 0.69 0.00 0.69 54.04 0.00 0.00 0.00 0.00 0.00 44.57
$ pidstat -u 5 1
// pidstat中没有%wait,需要更新成最新的版本,采用源码或者RPM安装。
// %wait 表示等待CPU的进程已经在CPU就绪队列中,处于运行态。
// 有别于 %iowait(wa),代表等待 I/O 的 CPU 时间,处于不可中断状态。
11时42分17秒 UID PID %usr %system %guest %CPU CPU Command
11时42分22秒 1000 315 0.00 4.00 0.00 4.00 1 stress-ng-iosyn
大量进程的例程
$ stress-ng -c 8 --timeout 600
// 模拟8个进程
$ uptime
11:53:18 up 13:32, 1 user, load average: 8.02, 6.47, 3.46
$ mpstat -P ALL 5 1
11时48分59秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11时49分04秒 all 98.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11时49分04秒 0 99.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11时49分04秒 1 96.80 0.00 3.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00
$ pidstat -u 5 1
11时49分03秒 UID PID %usr %system %guest %CPU CPU Command
11时49分08秒 1000 337 23.55 0.20 0.00 23.75 1 stress-ng-cpu
11时49分08秒 1000 338 24.55 0.00 0.00 24.55 0 stress-ng-cpu
11时49分08秒 1000 339 23.55 0.20 0.00 23.75 1 stress-ng-cpu
11时49分08秒 1000 340 23.35 0.20 0.00 23.55 0 stress-ng-cpu
11时49分08秒 1000 341 23.35 0.20 0.00 23.55 1 stress-ng-cpu
11时49分08秒 1000 342 24.55 0.00 0.00 24.55 0 stress-ng-cpu
11时49分08秒 1000 343 24.15 0.00 0.00 24.15 1 stress-ng-cpu
11时49分08秒 1000 344 24.55 0.20 0.00 24.75 0 stress-ng-cpu
uptime、mpstat、pidstat
Linux性能优化从入门到实战:02 CPU篇:平均负载的更多相关文章
- Linux性能优化从入门到实战:01 Linux性能优化学习路线
我通过阅读各种相关书籍,从操作系统原理.到 Linux内核,再到硬件驱动程序等等. 把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序.库函数.系统调用.再到内核和硬件等不同的层级贯 ...
- Linux性能优化从入门到实战:16 文件系统篇:总结磁盘I/O指标/工具、问题定位和调优
(1)磁盘 I/O 性能指标 文件系统和磁盘 I/O 指标对应的工具 文件系统和磁盘 I/O 工具对应的指标 (2)磁盘 I/O 问题定位分析思路 (3)I/O 性能优化思路 Step 1:首先采用 ...
- Linux性能优化从入门到实战:07 CPU篇:CPU性能优化方法
性能优化方法论 动手优化性能之前,需要明确以下三个问题: (1)如何评估性能优化的效果? 确定性能的量化指标.测试优化前的性能指标.测试优化后的性能指标. 量化指标的选择.至少要从应用程序 ...
- Linux性能优化从入门到实战:04 CPU篇:CPU使用率
CPU使用率是单位时间内CPU使用情况的统计,以百分比方式展示. $ top top - 11:46:45 up 7 days, 11:52, 1 user, load average: 0.00 ...
- Linux性能优化从入门到实战:03 CPU篇:CPU上下文切换
linux操作系统是将CPU轮流分配给任务,分时执行的.而每次执行任务时,CPU需要知道CPU寄存器(CPU内置的内存)和程序计数器PC(CPU正在执行指令和下一条指令的位置)值,这些值是CPU执 ...
- Linux性能优化从入门到实战:09 内存篇:Buffer和Cache
Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储. 避免跟文中的"缓存"一词混淆,而文中的"缓存",则通指内存中的临时存储 ...
- Linux性能优化从入门到实战:06 CPU篇:快速定位CPU瓶颈
CPU性能指标 (1)CPU使用率:1) 用户态CPU使用率(包括用户态 user 和低优先级用户态 nice).2) 系统CPU使用率.3) 等待 I/O 的CPU使用率.4) 软中断和硬 ...
- Linux性能优化从入门到实战:17 网络篇:网络基础
网络模型 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference ...
- Linux性能优化从入门到实战:15 文件系统篇:磁盘 I/O
磁盘 磁盘是可以持久化存储的设备,按照存储介质来分类: (1)机械磁盘(硬盘驱动器,Hard Disk Driver,HDD),主要由盘片和读写磁头组成,数据就存储在盘片的环状磁道中.在读写数 ...
随机推荐
- 校赛 你的粪坑V2
原题 今天举办程序设计比赛,2点30分开始,然而你睡到了2点25分,紧张的你将头发梳成大人模样,敷上一层最贵的面膜,穿着滑板鞋,以飞一般的速度奔向计算机学院准备参加程序设计竞赛!冠军是你的! 然而路上 ...
- Java异常处理的基础知识
Java中的异常捕获语句 Try{ //可能发生运行错误的代码: } catch(异常类型 异常对象引用){ //用于处理异常的代码 } finally{ //用于“善后” 的代码 } Java 中所 ...
- iOS9 3DTouch 之 Home Screen Quick Actions
最后更新:2016-12-18 测试环境: Xcode8.1 一.前言 iOS9 已经过去一年了,3D Touch也在项目中实战过,但一直没有总结一下,现在新的项目也用到了3D Touch, 网上找了 ...
- WWDC2014代码和视频下载
WWDC2014 sample code 地址 http://pan.baidu.com/s/1qWGznnY WWDC2014 videos 地址 https://github.com/liubin ...
- 大数据笔记(十四)——HBase的过滤器与Mapreduce
一. HBase过滤器 1.列值过滤器 2.列名前缀过滤器 3.多个列名前缀过滤器 4.行键过滤器5.组合过滤器 package demo; import javax.swing.RowFilter; ...
- mui初级入门教程(五)— 聊聊即时通讯(IM),基于环信 web im SDK
文章来源:小青年原创发布时间:2016-06-15关键词:mui,环信 web im,html5+,im,页面传值,缓存转载需标注本文原始地址: http://zhaomenghuan.github. ...
- foreach(增强for循环)和for的区别
https://www.cnblogs.com/XiaojianGo/p/7471860.html 首先说一下foreach有的也叫增强for循环,foreach其实是for循环的一个特殊简化版. 再 ...
- 数据库缓存之Memcache知识点
Memcache知识点总结: 一.Memcache安装及使用 参考地址:https://www.jb51.net/article/66525.htm 1.将下载的Memcache安装文件放到某盘下,如 ...
- 自定义控件 - 流式布局:TagFlowLayout
在项目中需要用到流式布局的样式,此文学习鸿洋大神的FlowLayout控件,学习使用一下.出自 http://blog.csdn.net/lmj623565791/article/details/38 ...
- 【原创】基于phpGrace+uniApp开发之:5.登录界面增加图片验证码
1.目的: 采用phpGrace中的图片验证码,在用户名+密码登录时使用图片验证码进行验证. 2.文档地址: 图片验证码的文档地址:http://www.phpgrace.com/tools/info ...