Linux性能优化之从CPU开始

对于Web开发人员来说,应用基本搭建在Linux服务器上。你可以对应用,Tomcat等进入优化,但是否有对Linux服务器做优化呢?Linux服务器的优化是有局限性的,它限制于硬件,我们能做的就是在这样的硬件下,把最好最优的资源指派给我们的应用使用,让我们的应用能获得最好的运行环境。

前面也说了,linux的局限性主要由硬件所决定的,那我们就需要针对硬件的使用数据来判断出当前性能情况。本篇是针对CPU检测的一些命令说明,让大家可以从CPU的使用情况来判断出哪里出现问题,找到了问题出在,才能对阵下药。请关注后续性能优化的其它文章!

一、CPU性能评估

CPU,对于学计算机的人来说,知道它对服务器的重要性,它就是服务器的心脏。我们的应用在处理逻辑时的任何操作都会以线程的方式向CPU发出指令,CPU计算完后把结果返回给应用,如果CPU的资源被其他无关的线程占用,那我们的应用在高并发下就不能得到很好的计算体验。

1、vmstat命令

命令作用:显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU的负载情况。

Linux性能优化之从CPU开始

  • r:表示运行和等待CPU时间片的进程线,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU
  • b:表示在等待资源的进程数,比如正在等待I/O或内存交换。
  • swpd:表示 切换内存交换区的内存数(以k为单位),如果出现swpd的值不为0,或者比较大,si,so的值长期为0的情况下,一般不会影响系统性能
  • free:表示当前空闲的物理内存数(以k为单位)
  • buff:表示bufffers cache(缓冲器缓存)的内存数(以k为单位),一般对块设备的读写才需要缓冲
  • cache:表示page cached的内存数,一般作为文件系统cached,频繁访问的文件都会被cached,如果cache值较大,说明cached的文件数较多,如果此时IO中的bi比较小,说明文件系统效率不错
  • si:表示由磁盘调入内存,也就是内存进入内存交换区的大小
  • so:表示内存调入磁盘,也就是内存交换区进入内存的大小
  • bi:表示从块设备读入数据的总量(也就是读磁盘的速度,每秒kb为单位)
  • bo:表示写入块设备数据的总量(也就是写磁盘的速度,每秒kb为单位)
  • in:表示在某一时间间隔中所观测到的每秒设备中断数
  • cs:表示每秒产生的上下文切换次数
  • us:表示用户进程消耗的CPU时间百分比,us的值越高,说明用户进程消耗的cpu时间越多,如果长期出现大于50%时,就需要考虑优化程序或算法
  • sy:表示内核进程消耗的CPU时间百分比,sy值越高,说明内核消耗的CPU资源越多。
  • id:表示CPU处在空闲状态的时间百分比
  • wa:表示IO等待所占用的CPU百分比,wa值越高,说明IO等待越严重,当wa的值超过20%时,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写所造成的,也有可能是磁盘或磁盘控制器的带宽瓶颈造成的。
  • st:表示虚拟机偷取CPU的时间百分比

注意事项:

  • 当si,so的值长期不为0时,说明系统内存不足,需要增加系统内存
  • 当bi+bo的值大于1000时,并且wa值也比较大,则表示系统磁盘IO有问题,应该考虑提高磁盘的读写性能。
  • 当in和cs这两个值较大时,会看到内核消耗的CPU时间会越多(system表示的是采集间隔内发生的中断数)。
  • 当us+sy的值大于80%时,说明可能存在CPU资源不足。这个时候也可以使用top命令动态查看各进程的CPU消耗,从而找到CPU占用高的进程

总结:

在对CPU的评估中,重点注意的是procs项r列值和CPU项中的us、sy和id列的值。

2、sar命令

sar也是CPU性能的检测工具,它可以对系统的每个方面进行单独统计,但要注意的是,sar命令会增加系统开销,对于系统开销已经达到负荷的情况下,还是不建议雪上加霜,以免变成压倒骆驼的最后一根稻草(当然,这种情况很少遇见)。

-A:所有报告的总和

-b:显示I/O和传输速率的统计信息

-B:显示分布状态

-d:硬盘使用报告

-r:内存和交换空间的使用统计

-g:串口I/O的情况

-a:文件读写情况

-c:系统调用情况

-n:统计网络信息

-q:报告队列长度和系统平均负载

-R:进程的活动情况

-y:终端设备活动情况

-w:系统交换活动

-x{pid|SELF|ALL}:报告指定进程ID的统计信息,SELF关键字是sar进程本身的统计,ALL关键字是所有系统进程的统计

2.1、使用 sar命令时,会以10分钟为间隔单位产生出当天到你执行命令的CPU数据,这种适合服务器当天第一次检测时使用,可以看到当天CPU使用情况。

Linux性能优化之从CPU开始

Linux性能优化之从CPU开始

2.2、CPU使得率命令:sar -u 10 5

10代表间隔时间,以秒为单位;

5代表显示数量;

这种适用于问题检测时获取当前CPU近期实时数据

Linux性能优化之从CPU开始

参数解析:

  • user:表示用户进程消耗CPU的时间百分比
  • nice:表示运行正常进程所消耗CPU的时间百分比
  • system:表示系统进程消耗CPU的时间百分比
  • iowait:表示IO等待所占用CPU的时间百分比
  • steal:表示内存相对紧张的环境下pagein强制对不同的页面进行的steal操作
  • idle:表示处于空闲状态下的CPU时间百分比

注意事项:

这个命令是对系统整体CPU使用状况的统计,Average那行属于汇总平均数,是前面几行累加后的每项平均值。

需要注意的是第一项(比如10:39:00分)的数据是包含sar命令本身所消耗的统计数,当你使用sar全日查看CPU消耗时,会发生第一行的12点数值会偏高一点点,不要觉得是不正常的时间点,因为它是包含了sar命令所消耗的资源。

sar命令可以获得对CPU在时间间距内的使用情况,但如果你的服务器是多CPU的系统,而应用程序使用了单线程,刚好这个线程所消耗的资源偏高而导致应用响应缓慢,这可能是单线程使用一个CPU占用率比较高,而其他CPU空闲。这就使得sar命令所显示的CPU使用整理情况不高。这个时候就需要对每个CPU进行分开查询(从上面的截图可以看到CPU那列是all,也就是全部CPU的数据,而对于命令下面的第一列的右边,有一个(2 CPU),代表着我这台服务器是有2个CPU)

2.3、CPU分查命令:sar -P 0 10 5

命令相对于前面,多了一个数值0,这个0代表着第一个CPU,当你要查第二个CPU使用情况时就是sar -P 1 10 5。看下图,我服务器是2个CPU的系统,如果继续执行sar -P 2 10 5命令的话,窗口是不出结果的,因为不存在第三块CPU。如果觉得这样命令要执行N个CPU命令太麻烦,也可以进行2.4的命令

Linux性能优化之从CPU开始

2.4、多CPU统计命令:mpstat -P ALL 1

参数说明:命令有大小字之分 ALL代表全部CPU ,后面数字1代表1秒实时刷新一次统计。也可以不带数字,就查当前CPU使用率的统计

Linux性能优化之从CPU开始

输出参数解析:相同参数请参考前面sar的参数解析

  • irq:硬件中断CPU的用量
  • sofr:软件中断CPU用量
  • guest:花在访客虚拟机的时间

注意事项:

重要的是关注user,sys,idle列,这几个显示了每个CPU的使用统计以及用户态和内核态的时间比例。可以根据这些值查看哪些CPU使用到达100%使用率(user+sys),而其它CPU未跑满可能是由单线程应用程序的负载或者设备中断映射所造成的。

2.5、各进程使用情况命令:pidstat

如果需要查看动态统计,可以使用命令:top

Linux性能优化之从CPU开始


分享到:


相關文章: