版权归Linux性能优化实战 作者倪鹏飞,本文主要是为学习、整理相关知识点,请勿用作商用,侵删。

linux性能分析工具

下图来自:Brendan D. Gregg http://www.brendangregg.com/

相关slide: http://www.brendangregg.com/Slides/Velocity2015_LinuxPerfTools.pdf

概念说明

什么是平均负载?

正确定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。
错误定义:单位时间内的cpu使用率。
可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即ps aux命令下STAT处于R状态的进程
不可中断状态的进程:处于内核态关键流程中的进程,且不可被打断,如等待硬件设备IO响应,ps命令D状态的进程
理想状态:每个cpu上都有一个活跃进程,即平均负载数等于cpu数
过载经验值:平均负载高于cpu数量70%的时候

平均负载与CPU使用率的区别

CPU使用率:单位时间内cpu繁忙情况的统计
情况1:CPU密集型进程,CPU使用率和平均负载基本一致
情况2:IO密集型进程,平均负载升高,CPU使用率不一定升高
情况3:大量等待CPU的进程调度,平均负载升高,CPU使用率也升高

分析套路

出现linux性能问题、需要进行分析时,可以采用如下的套路:

首先通过uptime查看系统负载,然后使用mpstat结合pidstat来初步判断到底是cpu计算量大还是进程争抢过大或者是io过多,接着使用vmstat分析切换次数,以及切换类型,来进一步判断到底是io过多导致问题还是进程争抢激烈导致问题。

引自:https://time.geekbang.org/column/article/70077 精选留言

每个命令的使用如下:

  • 1、使用uptime命令,查看当前系统平均负载(理想情况是平均负载等于CPU个数)。结合平均负载1、5、15分钟的值,分析负载变化情况。

    • watch -d uptime 查看平均负载变化情况,-d表示高亮显示变化的区域
  • 2、使用mpstat实时查看每个CPU的性能指标、所有CPU的平均指标

    • mpstat -P ALL 5 查看CPU使用率的变化情况,-P ALL表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据
    • mpstat -P ALL 5 1 显示所有CPU的指标,并在间隔5秒输出一组数据
  • 3、使用pidstat实时查看进程的CPU、内存、I/O、上下文切换等性能指标。mpstatpidstat结合起来可以初步判断是CPU计算量大/进程争抢过大/IO过多,可以获取进程pid、知道是具体哪个进程忙。

    • pidstat -u 5 1 间隔5秒输出1组数据
    • pidstat -w 5 每隔5秒输出1组数据,-w表示要查看进程上下文切换情况。注意如下两个指标:
      • cswch 每秒自愿上下文切换(voluntary context switches)的次数。指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
      • nvcswch 每秒非自愿上下文切换(non voluntary context switches)的次数。指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
    • pidstat -w -u 1 -u参数则表示输出CPU使用指标
    • pidstat -wt 1 pidstat默认显示进程的指标数据,加-t参数后会输出线程的指标。
  • 4、使用vmstat分析系统的内存使用情况,分析CPU上下文切换和中断的次数。

    • vmstat 5 每隔5秒输出1组数据。特别重视以下4列内容:

      • cs(context switch)是每秒上下文切换的次数。
      • in(interrupt)则是每秒中断的次数。
      • r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
      • b(Blocked)则是处于不可中断睡眠状态的进程数。

注意mpstatpidstat都包含在sysstat这个包中。

模拟工具

stress

stress是一个linux系统压力测试工具。

典型的一些模拟场景:

  • CPU密集型进程

    • stress --cpu 1 --timeout 600 模拟CPU使用率100%的场景
    • 分析
      • mpstat -P ALL 5: -P ALL表示监控所有CPU,5表示每5秒刷新一次数据,观察是否有某个cpu的%usr会很高,但iowait应很低
      • pidstat -u 5 1:每5秒输出一组数据,观察哪个进程%cpu很高,但是%wait很低,极有可能就是这个进程导致cpu飚高
  • I/O密集型进程
    • stress -i 1 --timeout 600 模拟I/O压力,即不断执行sync()函数,具体可以参考man
    • 分析
      • mpstat -P ALL 5: 观察是否有某个cpu的%iowait很高,同时%usr也较高
      • pidstat -u 5 1:观察哪个进程%wait较高,同时%CPU也较高
  • 大量进程的场景
    • stress -c 8 --timeout 600 模拟8个进程
    • 分析
      • pidstat -u 5 1:观察那些%wait较高的进程是否有很多

sysbench

sysbench 是一个多线程的基准测试工具,一般用来评估不同系统参数下的数据库负载情况。

典型场景:

  • sysbench --threads=10 --max-time=300 threads run 以10个线程运行5分钟的基准测试,模拟多线程切换的问题

其他

相关命令

  • 查看CPU核数 lscpugrep 'model name' /proc/cpuinfo | wc -l
  • 显示平均负载:uptimetop
  • watch -d uptime: -d会高亮显示变化的区域
  • watch -d cat /proc/interrupts

linux性能优化实战学习笔记-(1)CPU性能分析工具与套路相关推荐

  1. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  2. Linux性能优化实战学习笔记:第十讲==中断

    Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...

  3. 五十四、Linux性能优化实战学习笔记|套路篇:系统监控的综合思路

    目录 指标监控 日志监控 小结 上一节,我带你学习了,如何使用 USE 法来监控系统的性能,先简单回顾一下. 系统监控的核心是资源的使用情况,这既包括 CPU.内存.磁盘.文件系统.网络等硬件资源,也 ...

  4. 三十五、Linux性能优化实战学习笔记-基础篇:C10K 和 C1000K 回顾

    目录 C10K 怎么在32位系统的系统中支持并发 1 万的请求呢? 网络I/O 模型优化 I/O 多路复用的分类 select 或者 poll epoll 为什么Redis通常是选择使⽤epoll这种 ...

  5. 《南溪的目标检测学习笔记》——性能优化的学习笔记

    介绍 性能优化有两种方式: 理论分析 实验测试 1 理论分析 关于模型的性能分析,请参考博文<Roofline Model与深度学习模型的性能分析 (by Michael Yuan)>:

  6. 《Linux性能优化实战》笔记(四)—— CPU 使用率

    一. 节拍率与CPU时间 前一篇说到,Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉. 为了维护 CPU ...

  7. Linux性能优化实战:应用的CPU使用率100%,我该怎么办(05)

    一.什么是CPU的使用率 1.你最常用什么指标来描述系统的CPU性能? 我想你的答案,可能不是平均负载,也不是CPU上下文切换,而是另一个更直观的指标CPU使用率 CPU使用率到底是怎么算出来的吗? ...

  8. 《Linux性能优化实战》笔记(十三)—— 如何“快准狠”找到系统内存的问题

    一. 内存性能指标 为了分析内存的性能瓶颈,首先你要知道,怎样衡量内存的性能,也就是性能指标问题. 1. 系统内存使用情况:比如已用内存.剩余内存.共享内存.可用内存.cache和buffer的用量等 ...

  9. Java 性能优化实战记录(3)--JVM OOM的分析和原因追查

    前言: C/C++的程序员渴望Java的自由, Java程序员期许C/C++的约束. 其实那里都是围城, 外面的人想进来, 里面的人想出去. 背景: 作为Java程序员, 除了享受垃圾回收机制带来的便 ...

最新文章

  1. 在Linux中设置UMASK值
  2. RVDS4.0上开发cortex A8 NEON程序
  3. Nacos源码覆盖实例列表
  4. 用python处理excel的基本语法_《使用python3读取处理excel表的数据内容如何对内容求平均值》 用python读取excel文件...
  5. 关于codeforces加载慢
  6. ios 自定义字体_如何仅用几行代码在iOS应用中创建一致的自定义字体
  7. bzoj2733永无乡
  8. 大佬为何可以把单片机描述得如此形象生动?
  9. 促销海报设计的套路你知道么? 看这里!
  10. JS----window对象详解
  11. oracle开发的小技巧(原创)
  12. 数学中的几种共轭类型
  13. 北风网IOS软件工程师课程分享
  14. VMware中的三种网络模式
  15. java对接支付宝网页h5支付
  16. 生成.bks格式文件
  17. ~ 运算符和 ~~ 运算符(JS)
  18. 操作系统LAB1实验报告
  19. [DFS/递推/DP] 2327 [SCOI2005] 扫雷 ( 普及+/提高
  20. 解决 Android N 7.0 上 报错:android.os.FileUriExposedException

热门文章

  1. 设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声。
  2. 用u盘清除windows开机密码
  3. suse 11 sp4 安装python3.6.5
  4. Vue打印机打印文件(v-print)
  5. 奔腾G7505怎么样 相当于什么水平
  6. Zotero如何修改文献命名格式
  7. 面向对象程序设计原则——里式替换原则
  8. 【ResNet】肺炎CT影像识别
  9. 千古秘方治百病 看了就会有病不求医
  10. 机器学习(资源收藏)