转载:https://blog.csdn.net/ty_hf/article/details/63394960

一. 前言
为了更方便的理解本篇内容含义,所以请最好看看如下繁琐的概念,更容易理解。
没懂这些概念,就算看完你就只能知道,运行下vmstat ,看看linux反馈结果而已,更要知其所以然嘛~
 
先说说内存的概念。
不是讲cpu吗讲它干嘛?因为这个内存在互相转换的时候是会消耗cpu的。至于为什么要转换?耐心往下看吧。
Linux系统的内存分为物理内存和虚拟内存两种。物理内存是真实的,也就是物理内存条上的内存。而虚拟内存则是采用硬盘空间补充物理内存(很关键,他俩速度不一样有区别呀),将暂时不使用的内存页写到硬盘上以腾出更多的物理内存让有需要的进程使用。当这些已被腾出的内存页需要再次使用时才从硬盘(虚拟内存)中读回内存。这一切对于用户来说是透明的。通常对Linux系统来说,虚拟内存就是swap分区。
 
好了,下面引出本次的重头戏: vmstat 。
vmstat(VirtualMeomoryStatistics,虚拟内存统计)是Linux中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU等的整体情况进行监视。该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU的一个负载情况。
 
在系统中运行的每个进程都需要使用到物理内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。【这就是上边说的内存转换的过程】
Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。
当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。【上边为什么会消耗cpu的原因】
 
二.效果展示
vmstat 3 5 //每三秒输出一条信息,共输出5条
 
新手来说,是不是有些蒙,别说联合各项数据分析瓶颈了,先说说各个参数啥意思吧。
或者,换一种看法,下边的注意很重要哦:
 
 
三.实际分析
1. r:运行队列的等待进程数
 
r(run:运行队列正在执行进程数)和 b(block等待CPU资源的进程个数)。当r超过了CPU数目,就会出现CPU瓶颈了。
 
查看CPU的核的数量:cat /proc/cpuinfo|grep processor|wc -l
 
在评估cpu的性能优劣时完全照搬网上说的几倍几倍是不准确的,不能只看top里的参数,还得你自己动手看看vmstat显示的run值和blocked值,当出现明 显较多的blocked的时候,就说明cpu产生了瓶颈。而top命令和uptime命令显示的负载均值,只能作为判断系统过去某个时间段的状态的参照, 与cpu的性能关系不大。
 
当r值超过了CPU个数,就会出现CPU瓶颈,解决办法大体几种:
1. 最简单的就是增加CPU个数和核数
2. 通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进尔平衡系统任务
3. 调整已有任务的优先级
 
(tips: vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。
但要注意的是,CPU 满负荷工作并不能说明什么,Linux总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。
唯一能够确定CPU瓶颈的还是r(运行队列)的值。)
 
2.cpu使用率
如果CPU的id(空闲率)长期低于10%,那么表示CPU的资源已经非常紧张,应该考虑进程优化或添加更多地CPU。
wa(等待IO)表示CPU因等待IO资源而被迫处于空闲状态,这时候的CPU并没有处于运算状态,而是被白白浪费了,所以“等待IO应该越小越好。”
 
 
【top命令和uptime命令显示的负载均值,只能作为判断系统过去某个时间段的状态的参照, 与cpu的性能关系不大。】
 
文章推荐:
 
 
 
2.sar命令
检查CPU性能的第二个工具是sar,sar功能很强大,可以对系统的每个方面进行单独的统计,但是使用sar命令会增加系统开销,不过这些开销是可以评估的,对系统的统计结果不会有很大影响。
下面是sar命令对某个系统的CPU统计输出:
 
点击(此处)折叠或打开
  1. [root@webserver ~]# sar -u 3 5
  2. Linux 2.6.9-42.ELsmp (webserver) 11/28/2008 _i686_ (8 CPU)
  3. 11:41:24 AM CPU %user %nice %system %iowait %steal %idle
  4. 11:41:27 AM all 0.88 0.00 0.29 0.00 0.00 98.83
  5. 11:41:30 AM all 0.13 0.00 0.17 0.21 0.00 99.50
  6. 11:41:33 AM all 0.04 0.00 0.04 0.00 0.00 99.92
  7. 11:41:36 AM all 0.29 0.00 0.13 0.00 0.00 99.58
  8. 11:41:39 AM all 0.38 0.00 0.17 0.04 0.00 99.41
  9. Average: all 0.34 0.00 0.16 0.05 0.00 99.45
 
对上面每项的输出解释如下:
 %user列显示了用户进程消耗的CPU 时间百分比。
 %nice列显示了运行正常进程所消耗的CPU 时间百分比。
 %system列显示了系统进程消耗的CPU时间百分比。
 %iowait列显示了IO等待所占用的CPU时间百分比
 %steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作 。
 %idle列显示了CPU处在空闲状态的时间百分比。
 这个输出是对系统整体CPU使用状况的统计,每项的输出都非常直观,并且最后一行Average是个汇总行,是上面统计信息的一个平均值。
 需要注意的一点是:第一行的统计信息中包含了sar本身的统计消耗,所以%user列的值会偏高一点,不过,这不会对统计结果产生多大影响。
 在一个多CPU的系统中,如果程序使用了单线程,会出现这么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致 了整体CPU使用率不高,而应用缓慢 现象的发生 。
 针对这个问题,可以对系统的每个CPU分开查询,统计每个CPU的使用情况:
 
点击(此处)折叠或打开
  1. [root@webserver ~]# sar -P 0 3 5
  2. Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)
  3. 06:29:33 PM CPU %user %nice %system %iowait %steal %idle
  4. 06:29:36 PM 0 3.00 0.00 0.33 0.00 0.00 96.67
  5. 06:29:39 PM 0 0.67 0.00 0.33 0.00 0.00 99.00
  6. 06:29:42 PM 0 0.00 0.00 0.33 0.00 0.00 99.67
  7. 06:29:45 PM 0 0.67 0.00 0.33 0.00 0.00 99.00
  8. 06:29:48 PM 0 1.00 0.00 0.33 0.33 0.00 98.34
  9. Average: 0 1.07 0.00 0.33 0.07 0.00 98.53
这个输出是对系统的第一颗CPU的信息统计,需要注意的是,sar中对CPU的计数是从0开始的,因此,“sar -P 0 3 5”表示对系统的第一颗CPU进行信息统计,“sar -P 4 3 5”则表示对系统的第五颗CPU进行统计。依次类推。可以看出,上面的系统有八颗CPU。
 
3 iostat命令
 iostat指令主要用于统计磁盘IO状态,但是也能查看CPU的使用信息,它的局限性是只能显示系统所有CPU的平均信息,看下面的一个输出:
 
点击(此处)折叠或打开
  1. [root@webserver ~]# iostat -c
  2. Linux 2.6.9-42.ELsmp (webserver) 11/29/2008 _i686_ (8 CPU)
  3. avg-cpu: %user %nice %system %iowait %steal %idle
  4. 2.52 0.00 0.30 0.24 0.00 96.96
 在这里,我们使用了“-c”参数,只显示系统CPU的统计信息,输出中每项代表的含义与sar命令的输出项完全相同,不再详述。
 
 
1.4 uptime命令
 uptime是监控系统性能最常用的一个命令,主要用来统计系统当前的运行状况,输出的信息依次为:系统现在的时间、系统从上次开机到现在运行了多长时间、系统目前有多少登陆用户、系统在一分钟内、五分钟内、十五分钟内的平均负载。看下面的一个输出:
 
点击(此处)折叠或打开
  1. [root@webserver ~]# uptime
  2. 18:52:11 up 27 days, 19:44, 2 users, load average: 0.12, 0.08, 0.08
 
这里需要注意的是load average这个输出值,这三个值的大小一般不能大于系统CPU的个数,例如,本输出中系统有8个CPU,如果load average的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲的时间片,比如本例中的输出,CPU是非常空闲的。

Linux-cpu分析-vmstat的更多相关文章

  1. Linux性能分析 vmstat输出

    vmstat输出     1.linux系统下vmstat输出   vmstat的输出分为以下几种模式:   (1).VM MODE (普通选项) (2).DISK MODE(-d选项) (3).DI ...

  2. Linux性能分析 vmstat基本语法

    vmstat      vmstat 统计虚拟内存信息,可以对操作系统的proc.memory.CPU.IO等信息进行统计以呈现给用户.   根据操作系统的不同,vmstat的输出结果会有不同.大家可 ...

  3. linux系统性能调优第一步——性能分析(vmstat)

    linux系统性能调优第一步--性能分析(vmstat) 分类: LINUX 性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对linux性能分析工具vmstat的用法和实践进行详细介 ...

  4. linux概念之cpu分析

    http://ilinuxkernel.com/?cat=4 Linux CPU占用率原理与精确度分析1  CPU占用率计算原理在Linux/Unix 下,CPU 利用率分为用户态.系统态和空闲态,分 ...

  5. 【转】一文掌握 Linux 性能分析之 CPU 篇

    [转]一文掌握 Linux 性能分析之 CPU 篇 平常工作会涉及到一些 Linux 性能分析的问题,因此决定总结一下常用的一些性能分析手段,仅供参考. 说到性能分析,基本上就是 CPU.内存.磁盘 ...

  6. 一文掌握 Linux 性能分析之 CPU 篇

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 平常工作会涉及 ...

  7. Linux下分析某个进程CPU占用率高的原因

      Linux下分析某个进程CPU占用率高的原因 通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用  1.top 查到占用cpu高的进程pid 2.查看该pid的线程 ...

  8. 查看线程linux cpu使用率

    Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 转 http://www.cnblogs.com/lidabo/p/4738113.html目录(?)[-] proc文件系统 p ...

  9. Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

    目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps ...

  10. Linux内存分析

    Linux命令----分析内存的瓶颈    为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cac ...

随机推荐

  1. BZOJ3611 HEOI2014大工程

    先建虚树,然后统计答案. 对于这个两点间最大值和最小值的操作我参考了hzwer的代码. 建虚树时注意判自环 By:大奕哥 #include<bits/stdc++.h> using nam ...

  2. [JOISC2014]水筒

    OJ题号: BZOJ4242.AtCoder-JOISC2014E 题目大意: 给你一个h*w的网格图,每个格子可能是空地.障碍物和建筑物. 你只可以从空地上走过或者从建筑物中穿过. 建筑物总共有p个 ...

  3. 洛谷P3119 USACO15JAN 草鉴定

    题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...

  4. Caffe2(1)----Ubantu14.04安装

    英文好的请直接参考官方安装文档:Ubantu14.04下的源码编译. Caffe2的安装相比以前Caffe一代的安装,简直有点一键装机的感觉,下面简单总结下Caffe2的安装. 环境:Ubantu14 ...

  5. 传智播客PHP面试题宝典开放下载

    上下卷面试题更新完毕,一部让菜鸟4k+入职的 面试题宝典 http://php.itcast.cn/news/20130806/11490333788.shtml php视频教程 下载 http:// ...

  6. BZOJ 1500: [NOI2005]维修数列 (splay tree)

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 4229  Solved: 1283[Submit][Status ...

  7. xvcd – The Xilinx Virtual Cable Daemon

    http://debugmo.de/2012/02/xvcd-the-xilinx-virtual-cable-daemon/ I recently discovered an almost undo ...

  8. authentication not supported Connect to TFS Git from Xamarin Studio (non-hosted, locally installed TFS 2013)

    There are several instructions on how to connect to TFS Git from Xamarin Studio if you're using the ...

  9. javascript中的2个感叹号的用法

    !!是逻辑"非非",即是在逻辑"非"的基础上再"非"一次.通过!或!!可以将很多类型转换成bool类型,再做其它判断.     应用场景:判 ...

  10. linux下查找nginx里的nginx.conf文件地址方法

    在控制台输入nginx -t 回车即可看到所在目录,直接vi 目录 即可查看