在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。而监控CPU的性能一般包括以下3点:运行队列、CPU使用率和上下文切换。
对于每一个CPU来说运行队列最好不要超过3,例如,如果是双核CPU就不要超过6。如果队列长期保持在3以上,说明任何一个进程运行时都不能马上得到cpu的响应,这时可能需要考虑升级cpu。另外满负荷运行cpu的使用率最好是user空间保持在65%~70%,system空间保持在30%,空闲保持在0%~5% 。
下面总结下查看CPU使用率常用的几个命令。
这个命令很常用,在第三行有显示CPU当前的使用情况。
[root@li676-235~]#top-bn1-i-c
top-14:19:51up138days,7:15,1user,load average:0.20,0.33,0.39Tasks:115total,1running,114sleeping,0stopped,0zombieCpu(s):4.5%us,3.8%sy,0.0%ni,91.0%id,0.6%wa,0.0%hi,0.0%si,0.0%stMem:1014660ktotal,880512kused,134148kfree,264904kbuffersSwap:262140ktotal,34788kused,227352kfree,217144kcachedPID USER PR NI VIRT RES SHR S%CPU%MEM TIME+COMMAND12760root2001508419441632R2.00.20:00.01top-bn1-i-c
如上所示,top命令可以看到总体的系统运行状态和cpu的使用率 。
%us:表示用户空间程序的cpu使用率(没有通过nice调度)
%sy:表示系统空间的cpu使用率,主要是内核程序。
%ni:表示用户空间且通过nice调度过的程序的cpu使用率。
%id:空闲cpu
%wa:cpu运行时在等待io的时间
%hi:cpu处理硬中断的数量
%si:cpu处理软中断的数量
%st:被虚拟机偷走的cpu
之前在本博客中有介绍过vmstat的使用,详细使用和参数介绍参考网址:http://www.sijitao.net/1925.html 。
[root@li676-235~]#vmstat15procs-----------memory-------------swap-------io------system-------cpu-----r b swpd free buff cache si so bi boincs us sy id wa st203479268376147688356132161642138522549110303479297368147688326884000013313415679001034792624321476963607040008826727863181900003479297160147696326904000071821248400103479256572147696364540000426124661231600
sar命令语法和vmstat一样。命令不存在时需要安装sysstat包,这个包很有用。
CPU使用率
例如每1秒采集一次CPU使用率,共采集5次。
[root@li676-235~]#sar-u15Linux3.18.5-x86_64-linode52(li676-235)07/20/2015_x86_64_(1CPU)02:41:25PM CPU%user%nice%system%iowait%steal%idle02:41:26PM all64.710.0018.630.000.9815.6902:41:27PM all29.470.0022.1114.740.0033.6802:41:28PM all67.330.0031.680.990.000.0002:41:29PM all7.000.002.000.000.0091.0002:41:30PM all69.000.0023.000.000.008.00Average:all47.790.0019.483.010.2029.52
和top一样,可以看到所有cpu的使用情况。如果需要查看某颗cpu的使用可以用-P参数。例如指定显示0号cpu 的使用情况。
[root@li676-235~]#sar-P0-u15Linux3.18.5-x86_64-linode52(li676-235)07/20/2015_x86_64_(1CPU)02:45:14PM CPU%user%nice%system%iowait%steal%idle02:45:15PM044.000.0052.004.000.000.0002:45:16PM09.280.0026.8062.891.030.0002:45:17PM03.060.0014.2981.631.020.0002:45:18PM04.120.0022.6872.161.030.0002:45:19PM04.120.0022.6872.161.030.00Average:013.090.0027.8158.280.820.00
进程队列长度和平均负载状态
例如每1秒采集一次,共采集5次。
[root@li676-235~]#sar-q15Linux3.18.5-x86_64-linode52(li676-235)07/20/2015_x86_64_(1CPU)02:48:47PM runq-sz plist-sz ldavg-1ldavg-5ldavg-1502:48:48PM11330.340.430.4102:48:49PM21320.340.430.4102:48:50PM11330.340.430.4102:48:51PM21340.310.420.4002:48:52PM11330.310.420.40Average:11330.330.430.41
输出项:
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
进程创建的平均值和上下文切换的次数
例如每1秒收集一次,共收集5次。
[root@li676-235~]#sar-w15Linux3.18.5-x86_64-linode52(li676-235)07/20/2015_x86_64_(1CPU)02:54:03PM proc/s cswch/s02:54:04PM1.01156.5702:54:05PM1.00132.0002:54:06PM2.00201.0002:54:07PM2.02126.2602:54:08PM2.00114.00Average:1.61145.98
sar命令也可以获取过去指定日期的性能参数。
[root@li676-235~]#sar-u-f/var/log/sa/sa20Linux3.18.5-x86_64-linode52(li676-235)07/20/2015_x86_64_(1CPU)01:10:01PM CPU%user%nice%system%iowait%steal%idle01:20:02PM all25.780.008.883.590.1561.6001:30:01PM all26.060.009.963.330.1060.5501:40:01PM all25.730.009.173.700.0961.3201:50:01PM all25.700.009.502.790.1261.8902:00:01PM all26.700.009.732.200.1061.2802:10:01PM all26.160.009.564.340.1159.8202:20:01PM all25.490.009.612.760.0762.0702:30:01PM all26.470.009.940.640.3062.6502:40:02PM all27.320.0010.373.860.1558.3002:50:02PM all26.980.0010.384.560.1357.95Average:all26.240.009.713.180.1360.74
这个命令也在sysstat包中,语法类似。
例如每1秒收集一次,共5次。
[root@li676-235~]#mpstat15Linux3.18.5-x86_64-linode52(li676-235)07/20/2015_x86_64_(1CPU)03:01:18PM CPU%usr%nice%sys%iowait%irq%soft%steal%guest%idle03:01:19PM all52.530.0023.230.000.000.000.000.0024.2403:01:20PM all21.000.004.000.000.000.000.000.0075.0003:01:21PM all53.000.0018.000.000.000.000.000.0029.0003:01:22PM all26.000.003.000.000.000.000.000.0071.0003:01:23PM all46.000.0018.000.000.000.000.000.0036.00Average:all39.680.0013.230.000.000.000.000.0047.09
cpu使用情况比sar更加详细些,也可以用-P指定某颗cpu 。
这个命令主要用来查看io使用情况,也可以来查看cpu,个人感觉不常用。
[root@li676-235~]#iostat-c12Linux3.18.5-x86_64-linode52(li676-235)07/20/2015_x86_64_(1CPU)avg-cpu:%user%nice%system%iowait%steal%idle4.530.013.810.630.0490.99avg-cpu:%user%nice%system%iowait%steal%idle38.000.0014.000.000.0048.00
每秒cpu使用率情况获取
[root@li676-235~]#dstat-c----total-cpu-usage----usr sys idl wai hiq siq549110027116200052113700026106300150133700121672000
最占cpu的进程获取
[root@li676-235~]#dstat--top-cpu-most-expensive-cpu process mysqld1.5php-fpm:pool24mysqld59