每次发现系统变慢时,我们通常做的第一件事,就是执行 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篇:平均负载的更多相关文章

  1. Linux性能优化从入门到实战:01 Linux性能优化学习路线

      我通过阅读各种相关书籍,从操作系统原理.到 Linux内核,再到硬件驱动程序等等.   把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序.库函数.系统调用.再到内核和硬件等不同的层级贯 ...

  2. Linux性能优化从入门到实战:16 文件系统篇:总结磁盘I/O指标/工具、问题定位和调优

    (1)磁盘 I/O 性能指标 文件系统和磁盘 I/O 指标对应的工具 文件系统和磁盘 I/O 工具对应的指标 (2)磁盘 I/O 问题定位分析思路 (3)I/O 性能优化思路 Step 1:首先采用 ...

  3. Linux性能优化从入门到实战:07 CPU篇:CPU性能优化方法

    性能优化方法论   动手优化性能之前,需要明确以下三个问题:   (1)如何评估性能优化的效果? 确定性能的量化指标.测试优化前的性能指标.测试优化后的性能指标.   量化指标的选择.至少要从应用程序 ...

  4. Linux性能优化从入门到实战:04 CPU篇:CPU使用率

      CPU使用率是单位时间内CPU使用情况的统计,以百分比方式展示. $ top top - 11:46:45 up 7 days, 11:52, 1 user, load average: 0.00 ...

  5. Linux性能优化从入门到实战:03 CPU篇:CPU上下文切换

      linux操作系统是将CPU轮流分配给任务,分时执行的.而每次执行任务时,CPU需要知道CPU寄存器(CPU内置的内存)和程序计数器PC(CPU正在执行指令和下一条指令的位置)值,这些值是CPU执 ...

  6. Linux性能优化从入门到实战:09 内存篇:Buffer和Cache

      Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储.   避免跟文中的"缓存"一词混淆,而文中的"缓存",则通指内存中的临时存储 ...

  7. Linux性能优化从入门到实战:06 CPU篇:快速定位CPU瓶颈

    CPU性能指标      (1)CPU使用率:1) 用户态CPU使用率(包括用户态 user 和低优先级用户态 nice).2) 系统CPU使用率.3) 等待 I/O 的CPU使用率.4) 软中断和硬 ...

  8. Linux性能优化从入门到实战:17 网络篇:网络基础

    网络模型 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference ...

  9. Linux性能优化从入门到实战:15 文件系统篇:磁盘 I/O

    磁盘   磁盘是可以持久化存储的设备,按照存储介质来分类:   (1)机械磁盘(硬盘驱动器,Hard Disk Driver,HDD),主要由盘片和读写磁头组成,数据就存储在盘片的环状磁道中.在读写数 ...

随机推荐

  1. 果蝇优化算法(FOA)

    果蝇优化算法(FOA) 果蝇优化算法(Fruit Fly Optimization Algorithm, FOA)是基于果蝇觅食行为的仿生学原理而提出的一种新兴群体智能优化算法. 果蝇优化算法(FOA ...

  2. Presenter 层

    后是 Presenter 层,它是处理业务逻辑和业务数据的,所以必须持有 Model 的引用,同时要将处理完的数据交给 View 层用于显示,也必须持有 View 的引用,那么,一开始我们就要把这两层 ...

  3. shell 中使用正则表达式

    ls | xargs echo | sed 's/.*\(\w\+\)\s\(\w\+\s\)*\1d.*/\1/' 说明 \w\+表示一段连续的字符串 \s\+ 一个或者多个空格 \s* 0个或者多 ...

  4. kubeadm快速部署kubernetes(十九)

    安装要求 部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 ...

  5. 在vue中如何引jquer

    最近学习vue,习惯性的通过<script>标签引入jquery,写完后报错才想起来,这种方式在vue是不适用的. 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jqu ...

  6. Non-local Neural Networks

    1. 摘要 卷积和循环神经网络中的操作都是一次处理一个局部邻域,在这篇文章中,作者提出了一个非局部的操作来作为捕获远程依赖的通用模块. 受计算机视觉中经典的非局部均值方法启发,我们的非局部操作计算某一 ...

  7. MySQL-default设置

    Both statements insert a value into the phone column, but the first inserts a NULL value and the sec ...

  8. 用Vue来实现音乐播放器(九):歌单数据接口分析

    z这里如果我们和之前获取轮播图的数据一样来获取表单的数据  发现根本获取不到 原因是qq音乐在请求头里面加了authority和refer等 但是如果我们通过jsonp实现跨域来请求数据的话  是根本 ...

  9. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第3节 Random类_9-生成指定范围的随机数

    左闭右开区间

  10. 封装redis(set/get/delete)str和哈希类型

    将Redis的常用操作封装了一下: import redis class MyRedis(): def __init__(self,ip,passwd,port=6379,db=0): #构造函数 t ...