每次发现系统变慢时,我们通常做的第一件事,就是执行 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. time,sys,os模块

      1.time模块 a:结构化时间:struct_time:通过time.localtime获取到一个时间对象,通过这个对象得到对象属性 ****localtime()如果没有参数,默认返回是一个时 ...

  2. [BZOJ3527][ZJOI2014]力:FFT

    分析 整理得下式: \[E_i=\sum_{j<i}{\frac{q_i}{(i-j)^2}}-\sum_{j>i}{\frac{q_i}{(i-j)^2}}\] 假设\(n=5\),考虑 ...

  3. Scrapy 学习笔记爬豆瓣 250

    Scrapy 是比较上层的库,基于中间层开发,它基于高层,所以它依赖许多其它库.事件驱动的异步技术. Scrapy 爬取网页,以豆瓣电影 Top 250 为例子. 首先打开命令提示符,输入.scrap ...

  4. shell后台进程

    建立duplicate_removal.sh文件,内容如下:#!/bin/bashmysql -vvv -u root -p123456 test -e "truncate t_target ...

  5. java配置环境变量 jdk1.8

    1.首先第一步安装JDK window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/j ...

  6. vue-cli目录结构介绍

    一个vue-cli的项目结构如下: 文件结构细分: 1.build——[webpack配置] build文件主要是webpack的配置,主要启动文件是dev-server.js,当我们输入npm ru ...

  7. lazyload懒加载插件

    在main.js中引入vue-lazyload插件  并使用 注册插件: import VueLazyLoad from 'vue-lazyload' Vue.use(VueLazyLoad,{ lo ...

  8. 执行 bower -v 时出现内部错误

    安装nodejs ,我的位置是D:\node.js_install.全局模块安装默认放在C:\Users\Administrator\AppData\Roaming\npm\node_modules里 ...

  9. [Udemy] ES 7 and Elastic Stack - part 2

    Section 3: Searching with Elasticsearch query with json 分页返回 Sort full text 的内容不能用来sort, 比如movie的 ti ...

  10. K近邻实战手写数字识别

    1.导包 import numpy as np import operator from os import listdir from sklearn.neighbors import KNeighb ...