Linux常用检测性能的10个基本命令汇总

本文的内容主要来自对netflix的一篇技术博客(linux performance analysis in 60,000 milliseconds,并添加了一些自己的理解,仅供参考。
1. uptime
$uptime23:51:26up21:31,1user,loadaverage:30.02,26.43,19.0212
该命令可以大致的看出计算机的整体负载情况,load average后的数字分别表示计算机在1min、5min、15min内的平均负载。
2. dmesg | tail
$dmesg|tail[1880957.563150]perlinvokedoom-killer:gfp_mask=0x280da,order=0,oom_score_adj=0[...][1880957.563400]outofmemory:killprocess18694(perl)score246orsacrificechild[1880957.563408]killedprocess18694(perl)total-vm:1972392kb,anon-rss:1953348kb,file-rss:0kb[2320864.954447]tcp:possiblesynfloodingonport7001.droppingrequest.checksnmpcounters.123456
打印内核环形缓存区中的内容,可以用来查看一些错误;
上面的例子中,显示进程18694 因引内存越界被kill掉以及tcp request被丢弃的错误。通过dmesg可以快速判断是否有导致系统性能异常的问题。
3. vmstat 1
$vmstat1procs---------memory-------------swap-------io-----system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast3400200889792737085918280005610961300320020088992073708591860000592132844282981100320020089011273708591860000095012154991000320020088956873712591856000481190024599900003200200890208737125918600000158984840981100^c123456789
打印进程、内存、交换分区、io和cpu等的统计信息;
vmstat的格式如下
>vmstat[options][delay[count]]
vmstat第一次输出表示从开机到vmstat运行时的平均值;剩余输出的都是在指定的时间间隔内的平均值,上述例子中delay的值设置为1,除第一次以外,剩余的都是1秒统计一次,count未设置,将会一直循环打印。
$vmstat103procs-----------memory-------------swap-------io-----system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast1002527112108688813720228001142111990000025271561086888137198560001043003490100990000025264121086888137199040001033454870019900123456
上述的例子中delay设置为10,count设置为3,表示每行打印10秒内的平均值,只打印3次。
需要检查的列
r:表示正在运行或者等待cpu调度的进程数。因为该列数据不包含i/o的统计信息,因此可以用来检测cpu是否饱和。若r列中的数字大于cpu的核数,表示cpu已经处于饱和状态。
free:当前剩余的内存;
si, so:交换分区换入和换出的个数,若换入换出个数大于0,表示内存不足;
us, sy, id, wa:cpu的统计信息,分别表示user time、system time(kernel)、idle、wait i/o。i/o处理所用的时间包含在system time中,因此若system time超过20%,则i/o可能存在瓶颈或异常;
4. mpstat -p all 1
$mpstat-palllinux3.10.0-229.el7.x86_64(localhost.localdomain)05/30/2018_x86_64_(16cpu)04:03:55pmcpu%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle04:03:55pmall3.670.000.610.710.000.000.000.000.0095.0204:03:55pm03.520.000.570.760.000.000.000.000.0095.1504:03:55pm13.830.000.610.710.000.000.000.000.0094.8504:03:55pm23.800.000.610.600.000.000.000.000.0094.9904:03:55pm33.680.000.580.600.000.000.000.000.0095.1304:03:55pm43.540.000.570.600.000.000.000.000.0095.30[...]1234567891011
该命令用于每秒打印一次每个cpu的统计信息,可用于查看cpu的调度是否均匀。
5. pidstat 1
$pidstat1linux3.13.0-49-generic(titanclusters-xxxxx)07/14/2015_x86_64_(32cpu)07:41:02pmuidpid%usr%system%guest%cpucpucommand07:41:03pm090.000.940.000.941rcuos/007:41:03pm042145.665.660.0011.3215mesos-slave07:41:03pm043540.940.940.001.898java07:41:03pm065211596.231.890.001598.1127java07:41:03pm065641571.707.550.001579.2528java07:41:03pm60004601540.944.720.005.669pidstat07:41:03pmuidpid%usr%system%guest%cpucpucommand07:41:04pm042146.002.000.008.0015mesos-slave07:41:04pm065211590.001.000.001591.0027java07:41:04pm065641573.0010.000.001583.0028java07:41:04pm10867181.000.000.001.000snmp-pass07:41:04pm60004601541.004.000.005.009pidstat^c123456789101112131415161718
该命令用于打印各个进程对cpu的占用情况,类似top命令中显示的内容。pidstat的优势在于,可以滚动的打印进程运行情况,而不像top那样会清屏。
上述例子中,%cpu中两个java进程的cpu利用率分别达到了1590%和1573%,表示java进程占用了16颗cpu。
6. iostat -xz 1
类似vmstat,第一次输出的是从系统开机到统计这段时间的采样数据;
$iostat-xz1linux3.13.0-49-generic(titanclusters-xxxxx)07/14/2015_x86_64_(32cpu)avg-cpu:%user%nice%system%iowait%steal%idle73.960.003.730.030.0622.21device:rrqm/swrqm/sr/sw/srkb/swkb/savgrq-szavgqu-szawaitr_awaitw_awaitsvctm%utilxvda0.000.230.210.184.522.0834.370.009.9813.805.422.440.09xvdb0.010.001.028.94127.97598.53145.790.000.431.780.280.250.25xvdc0.010.001.028.86127.79595.94146.500.000.451.820.300.270.26dm-00.000.000.692.3210.4731.6928.010.013.230.713.980.130.04dm-10.000.000.000.940.013.788.000.33345.840.04346.810.010.00dm-20.000.000.090.071.350.3622.500.002.550.235.621.780.03[...]^c123456789101112131415
检查列
r/s, w/s, rkb/s, wkb/s,表示每秒向i/o设备发出的reads、writes、read kbytes、write kbytes的数量。
await,表示应用程序排队等待和被服务的平均i/o时间,该值若大于预期的时间,这表示i/o设备处于饱和状态或者异常。
avgqu-sz,表示请求被发送给i/o设备的平均时间,若该值大于1,则表示i/o设备可能已经饱和;
%util,每秒设备的利用率;若该利用率超过60%,则表示设备出现性能异常;
7. free -m
$free-mtotalusedfreesharedbufferscachedmem:245998245452214538359541-/+buffers/cache:23944222053swap:00012345
检查的列:
buffers: for the buffer cache, used for block device i/o.
cached: for the page cache, used by file systems.
若buffers和cached接近0,说明i/o的使用率过高,系统存在性能问题。linux中会用free内存作为cache,若应用程序需要分配内存,系统能够快速的将cache占用的内存回收,因此free的内存包含cache占用的部分。
8. sar -n dev 1
sar是system activity reporter的缩写,系统活动状态报告。
-n { keyword [,…] | all },用于报告网络统计数据。keyword可以是以下的一个或者多个: dev, edev, nfs, nfsd, sock, ip, eip, icmp, eicmp, tcp, etcp, udp, sock6, ip6, eip6, icmp6, eicmp6 和udp6。
-n dev 1, 每秒统计一次网络的使用情况;-n edev 1,每秒统计一次错误的网络信息;
$sar-ndev1linux3.10.0-229.el7.x86_64(localhost.localdomain)05/31/2018_x86_64_(16cpu)03:54:57pmifacerxpck/stxpck/srxkb/stxkb/srxcmp/stxcmp/srxmcst/s03:54:58pmens323286.007207.00283.3418333.900.000.000.0003:54:58pmlo0.000.000.000.000.000.000.0003:54:58pmvethe915e510.000.000.000.000.000.000.0003:54:58pmdocker00.000.000.000.000.000.000.0003:54:58pmifacerxpck/stxpck/srxkb/stxkb/srxcmp/stxcmp/srxmcst/s03:54:59pmens323304.007362.00276.8918898.510.000.000.0003:54:59pmlo0.000.000.000.000.000.000.0003:54:59pmvethe915e510.000.000.000.000.000.000.0003:54:59pmdocker00.000.000.000.000.000.000.00^c123456789101112131415
iface ,网络接口名称;
rxpck/s ,每秒接收到包数;
txpck/s ,每秒传输的报数;(transmit packages)
rxkb/s ,每秒接收的千字节数;
txkb/s ,每秒发送的千字节数;
rxcmp/s ,每秒接收的压缩包的数量;
txcmp/s ,每秒发送的压缩包的数量;
rxmcst/s,每秒接收的组数据包数量;
9. sar -n tcp,etcp 1
该命令可以用于粗略的判断网络的吞吐量,如发起的网络连接数量和接收的网络连接数量;
tcp, 报告关于tcpv4网络流量的统计信息;
etcp, 报告有关tcpv4网络错误的统计信息;
$sar-ntcp,etcp1linux3.10.0-514.26.2.el7.x86_64(aushop)05/31/2018_x86_64_(2cpu)04:16:27pmactive/spassive/siseg/soseg/s04:16:44pm0.002.0015.0013.0004:16:45pm0.003.00126.00203.0004:16:46pm0.000.0099.0099.0004:16:47pm0.000.0018.009.0004:16:48pm0.000.005.006.0004:16:49pm0.000.001.001.0004:16:50pm0.001.004.004.0004:16:51pm0.003.00171.00243.00^c12345678910111213
检测的列:
active/s: number of locally-initiated tcp connections per second (e.g., via connect()),发起的网络连接数量;
passive/s: number of remotely-initiated tcp connections per second (e.g., via accept()),接收的网络连接数量;
retrans/s: number of tcp retransmits per second,重传的数量;
10. top
top命令包含更多的指标统计,相当于一个综合命令。
$toptop-00:15:40up21:56,1user,loadaverage:31.09,29.87,29.92tasks:871total,1running,868sleeping,0stopped,2zombie%cpu(s):96.8us,0.4sy,0.0ni,2.7id,0.1wa,0.0hi,0.0si,0.0stkibmem:25190241+total,24921688used,22698073+free,60448bufferskibswap:0total,0used,0free.554208cachedmempiduserprnivirtresshrs%cpu%memtime+command20248root2000.227t0.012t18748s30905.229812:58java4213root20027225446464044232s23.50.0233:35.37mesos-slave66128titancl+2002434423321172r1.00.00:00.07top5235root20038.227g54700449996s0.70.22:02.74java4299root20020.015g2.682g16836s0.31.133:14.42java1root2003362029201496s0.00.00:03.82init2root200000s0.00.00:00.02kthreadd3root200000s0.00.00:05.35ksoftirqd/05root0-20000s0.00.00:00.00kworker/0:0h6root200000s0.00.00:06.94kworker/u256:08root200000s0.00.02:38.05rcu_sched12345678910111213141516171819
11. 总结
下面的图片很好的展示了各个命令的主要作用,如使用vmstat查看系统的整体性能,mpstat用于查看cpu的性能,pidstat用于查看进程的状态,iostat用于查看io的状态,free用于产看内存的状态,sar用于产看网络的状态等。
image.png
linux常用性能工具一览
linux performance tools

中美在AI领域中 刮来一阵强风
特斯拉私有化终止的最直接原因是什么?
亚运进口食品实施RFID无缝检测
LED电子生日蜡烛的电路实现,led candle
dotData致力于为企业提供全周期数据科学自动化和运营
Linux常用检测性能的10个基本命令汇总
半导体行业2016上半年并购案盘点 抱团取暖?
能秒掉GTX1070吗?AMD RX580显卡最深度评测
企业AI的四个发展阶段分别是哪四个阶段
汽车行业进行多维度大数据画像分析
变阻器的作用
电子管功放(胆机)交流噪声概述
华为荣耀6X和荣耀8的区别,看完再卖也不迟!
电气控制线路故障的检查方法_电气控制线路故障的检修步骤
ARM的年度迭代策略 ARM Cortex-A77架构好在哪里
Mobileye亮相道路运输车辆展 致力于打造更安全的道路交通
不容小觑的2014十大技术趋势
DDS的基本原理 :相位累加器、存储的波形表、高速DAC
5G商用临近 物联网将有何改变?
法雷奥的一流激光雷达技术获得两项新殊荣,展现领导地位!