cpu篇:
CPU 也是一种硬件资源,和任何其他硬件设备一样也需要驱动和管理程序才能使用,我们可以把内核的进程调度看作是 
CPU 的管理程序,用来管理和分配 CPU 资源,合理安排进程抢占 CPU,并决定哪个进程该使用 CPU、哪个进程该等待

要想监测和理解 CPU 的性能需要知道一些的操作系统的基本知识,比如:中断、进程调度、进程上下文切换、可运行 
队列等。这里 VPSee 用个例子来简单介绍一下这些概念和他们的关系,CPU 很无辜,是个任劳任怨的打工仔,每时每 
刻都有工作在做(进程、线程)并且自己有一张工作清单(可运行队列),由老板(进程调度)来决定他该干什么,他 
需要和老板沟通以便得到老板的想法并及时调整自己的工作(上下文切换),部分工作做完以后还需要及时向老板汇报 
(中断),所以打工仔(CPU)除了做自己该做的工作以外,还有大量时间和精力花在沟通和汇报上。

进程调度给不同的资源分配了不同的优先级,优先级最高的是硬件中断,其次是内核(系统)进程,最后是用户进程。 
每个 CPU 都维护着一个可运行队列,用来存放那些可运行的线程。线程要么在睡眠状态(blocked 正在等待 IO)要么 
在可运行状态,如果 CPU 当前负载太高而新的请求不断,就会出现进程调度暂时应付不过来的情况,这个时候就不得 
不把线程暂时放到可运行队列里。

  • 打工仔接受和完成多少任务并向老板汇报了(中断);

  • 打工仔和老板沟通、协商每项工作的工作进度(上下文切换);

  • 打工仔的工作列表是不是都有排满(可运行队列);

  • 打工仔工作效率如何,是不是在偷懒(CPU 利用率)

底线

上一篇 Linux 性能监测:介绍 提到了性能监测前需要知道底线,那么监测 CPU 性能的底线是什么呢?通常我们期望我们的系统能到达以下目标:

  • CPU 利用率,如果 CPU 有 100% 利用率,那么应该到达这样一个平衡:65%-70% User Time,30%-35% System Time,0%-5% Idle Time;

  • 上下文切换,上下文切换应该和 CPU 利用率联系起来看,如果能保持上面的 CPU 利用率平衡,大量的上下文切换是可以接受的;

  • 可运行队列,每个可运行队列不应该有超过1-3个线程(每处理器),比如:双处理器系统的可运行队列里不应该超过6个线程

vmstat

vmstat 是个查看系统整体性能的小工具,小巧、即使在很 heavy 的情况下也运行良好,并且可以用时间间隔采集得到连续的性能数据。

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st2  1    140 2787980 336304 3531996  0    0     0   128 1166 5033  3  3 70 25  00  1    140 2788296 336304 3531996  0    0     0     0 1194 5605  3  3 69 25  00  1    140 2788436 336304 3531996  0    0     0     0 1249 8036  5  4 67 25  00  1    140 2782688 336304 3531996  0    0     0     0 1333 7792  6  6 64 25  03  1    140 2779292 336304 3531992  0    0     0    28 1323 7087  4  5 67 25  0

参数介绍:

  • r,可运行队列的线程数,这些线程都是可运行状态,只不过 CPU 暂时不可用;

  • b,被 blocked 的进程数,正在等待 IO 请求;

  • in,被处理过的中断数

  • cs,系统上正在做上下文切换的数目

  • us,用户占用 CPU 的百分比

  • sys,内核和中断占用 CPU 的百分比

  • wa,所有可运行的线程被 blocked 以后都在等待 IO,这时候 CPU 空闲的百分比

  • id,CPU 完全空闲的百分比

举两个现实中的例子来实际分析一下:

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st4  0    140 2915476 341288 3951700  0    0     0     0 1057  523 19 81  0  0  04  0    140 2915724 341296 3951700  0    0     0     0 1048  546 19 81  0  0  04  0    140 2915848 341296 3951700  0    0     0     0 1044  514 18 82  0  0  04  0    140 2915848 341296 3951700  0    0     0    24 1044  564 20 80  0  0  04  0    140 2915848 341296 3951700  0    0     0     0 1060  546 18 82  0  0  0

从上面的数据可以看出几点:

  1. interrupts(in)非常高,context switch(cs)比较低,说明这个 CPU 一直在不停的请求资源;

  2. user time(us)一直保持在 80% 以上,而且上下文切换较低(cs),说明某个进程可能一直霸占着 CPU;

  3. run queue(r)刚好在4个。

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
14  0    140 2904316 341912 3952308  0    0     0   460 1106 9593 36 64  1  0  0
17  0    140 2903492 341912 3951780  0    0     0     0 1037 9614 35 65  1  0  0
20  0    140 2902016 341912 3952000  0    0     0     0 1046 9739 35 64  1  0  0
17  0    140 2903904 341912 3951888  0    0     0    76 1044 9879 37 63  0  0  0
16  0    140 2904580 341912 3952108  0    0     0     0 1055 9808 34 65  1  0  0

从上面的数据可以看出几点:

  1. context switch(cs)比 interrupts(in)要高得多,说明内核不得不来回切换进程;

  2. 进一步观察发现 system time(sy)很高而 user time(us)很低,而且加上高频度的上下文切换(cs),说明正在运行的应用程序调用了大量的系统调用(system call);

  3. run queue(r)在14个线程以上,按照这个测试机器的硬件配置(四核),应该保持在12个以内。

mpstat

mpstat 和 vmstat 类似,不同的是 mpstat 可以输出多个处理器的数据,下面的输出显示 CPU1 和 CPU2 基本上没有派上用场,系统有足够的能力处理更多的任务。

$ mpstat -P ALL 1
Linux 2.6.18-164.el5 (vpsee) 11/13/200902:24:33 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
02:24:34 PM  all    5.26    0.00    4.01   25.06    0.00    0.00    0.00   65.66   1446.00
02:24:34 PM    0    7.00    0.00    8.00    0.00    0.00    0.00    0.00   85.00   1001.00
02:24:34 PM    1   13.00    0.00    8.00    0.00    0.00    0.00    0.00   79.00    444.00
02:24:34 PM    2    0.00    0.00    0.00  100.00    0.00    0.00    0.00    0.00      0.00
02:24:34 PM    3    0.99    0.00    0.99    0.00    0.00    0.00    0.00   98.02
  1. 您拥有前面所述的 vmstat 时,您可能想知道 mpstat 命令的作用。差别很大:mpstat 可以显示每个处理器的统计,

  2. 而 vmstat 显示所有处理器的统计。因此,编写糟糕的应用程序(不使用多线程体系结构)可能会运行在一个多处理器机器上,

  3. 而不使用所有处理器。从而导致一个 CPU 过载,而其他 CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题


转载于:https://blog.51cto.com/beautifual/1559749

linux性能监测工具相关推荐

  1. pyDash : Linux 性能监测工具

    2019独角兽企业重金招聘Python工程师标准>>> pyDash 是一个轻量且基于 web 的 Linux 性能监测工具,它是用 Python 和 Django 加上 Chart ...

  2. 十三个强大的Linux性能监测工具

    Linux系统下,大多数的性能监测工具保存在/proc目录下.这里我们将Linux AS 和 SUSE LINUX EnterpriseServer中的命令行及图形方式下的性能监测工具做概括性介绍.这 ...

  3. Linux 性能监测工具总结

    前言: Linux系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工具来判断究竟是哪一部分(内存.CPU.硬盘--)出了问题.在Linux系统中,所有的运行参数保存在虚拟目录/ ...

  4. Linux 性能监测工具

    Linux系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工具来判断究竟是哪一部分(内存.CPU.硬盘--)出了问题.在Linux系统中,所有的运行参数保存在虚拟目录/proc ...

  5. Linux性能监测工具Nmon介绍及其使用

    1 NMON介绍 Nmon由 IBM 开发并已开源 (Nmon for linux 版本已经在 2009 年 7 月 27 日开放源码 ) ,是收集 AIX 或 Linux 主机的性能数据并分析的工具 ...

  6. linux java性能监控工具_常用Linux 性能监测工具

    执行iostat命令可以从系统启动之后的CPU平均时间,类似于uptime.除此之外,iostat还对创建一个服务器磁盘子系统的活动报告.该报告包含两部分:CPU使用情况和磁盘使用情况. iostat ...

  7. 超实用的8个Linux命令行性能监测工具

    本文总结了8个非常实用的Linux命令行性能监测工具,这些命令支持所有的Linux系统,不仅可以用于监控系统,还可以发现导致性能问题的原因所在. 对每个系统/网络管理员来说,每天监测Linux系统性能 ...

  8. Linux 性能监测

    Linux 性能监测:介绍 看了某某教程.读了某某手册,按照要求改改某某设置.系统设定.内核参数就认为做到系统优化的想法很傻很天真:)系统优化是一项复杂.繁琐.长期的 工作,优化前需要监测.采集.测试 ...

  9. Linux 性能监测:介绍

    http://www.vpsee.com/2009/11/linux-system-performance-monitoring-introduction/ 看了某某教程.读了某某手册,按照要求改改某 ...

  10. (转)超全整理!Linux性能分析工具汇总合集

    原文地址:https://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇 ...

最新文章

  1. 程序员MM的自白:磨人小妖精之安卓碎片化
  2. OpenGL中着色器,渲染管线,光栅化
  3. 【直播课】6小时教你熟知Anchor free理论基础,掌握项目实战技巧
  4. 红米ac2100breed看模块_骁龙865加持,红米K30S至尊纪念版11日再开售
  5. 内置函数之sorted,filter,map
  6. 安卓post 提交图片流和字符数据
  7. lg2用计算机怎么算,lg计算器(log计算器在线)
  8. Android手机投屏利器scrcpy
  9. oracle11g监听配置访问QA
  10. VML Mathematical Functions
  11. Kettle(三)Java定时调用.ktr文件
  12. 书籍推荐-游戏程序员的学习之路
  13. 实现《你的名字》同款滤镜,python+opencv
  14. tig只看某个作者的提交
  15. 怎样将微信热门文章采集到自己的公众号中?
  16. 计算机装饰表格123教学设计,计算机基础培训123.doc
  17. 浅析溯源(2):如何实现区块链溯源
  18. 基于LM334芯片的恒流源调试
  19. 部分ADSL猫的默认密码
  20. easyexcel 自适应(行宽, 行高)

热门文章

  1. fastText原理和文本分类实战,看这一篇就够了
  2. 【GNN框架系列】DGL第一讲:使用Deep Graph Library实现GNN进行节点分类
  3. Aho-Corasick
  4. java基础学习(7)浅析final,private,public,protected,static等关键以及它们的区别的联系
  5. Reason of Random Initialization - Neural Networks
  6. 服务器lsass占用内存_服务器内存跑满是什么原因造成的呢?
  7. Posta:跨文档信息安全搜索工具
  8. android手机和荣耀哪个版本好,【求测评】荣耀v40轻奢版与荣耀X10哪款更好?图文爆料分析...
  9. oracle表内连接和外连接
  10. opensuse安装pycharm