共计 7379 个字符,预计需要花费 19 分钟才能阅读完成。
今天马哥教育要跟大家分享的文章是关于 Linux 学习 必备的 Linux 性能检测常用命令汇总。为了帮助大家更好的学习和掌握 Linux 运维 技巧,今天为大家带来了这篇文章,下面让我们一起来看一看吧,希望能够对小伙伴们有所帮助。
01、uptime
$ uptime | |
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.0212 |
该命令可以大致的看出计算机的整体负载情况,load average 后的数字分别表示计算机在 1min、5min、15min 内的平均负载。
02、dmesg | tail
$ dmesg | tail | |
[0x280da, order=0, oom_score_adj=0 | ] perl invoked oom-killer: gfp_mask=|
[...] | |
[18694 (perl) score 246 or sacrifice child | ] Out of memory: Kill process|
[18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB | ] Killed process|
[on port 7001. Dropping request. Check SNMP counters.123456 | ] TCP: Possible SYN flooding
打印内核环形缓存区中的内容,可以用来查看一些错误;
上面的例子中,显示进程 18694 因引内存越界被 kill 掉以及 TCP request 被丢弃的错误。通过 dmesg 可以快速判断是否有导致系统性能异常的问题。
03、vmstat 1
$ 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 | |
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0 | |
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0 | |
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0 | |
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0 | |
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0 | |
^C123456789 |
打印进程、内存、交换分区、IO 和 CPU 等的统计信息;
vmstat 的格式如下
> vmstat [options] [delay [count]]
vmstat 第一次输出表示从开机到 vmstat 运行时的平均值;剩余输出的都是在指定的时间间隔内的平均值,上述例子中 delay 的值设置为 1,除第一次以外,剩余的都是 1 秒统计一次,count 未设置,将会一直循环打印。
$ vmstat 10 3 | |
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- | |
r b swpd free buff cache si so bi bo in cs us sy id wa st | |
1 0 0 2527112 1086888 13720228 0 0 1 14 2 1 1 1 99 0 0 | |
0 0 0 2527156 1086888 13719856 0 0 0 104 3003 4901 0 0 99 0 0 | |
0 0 0 2526412 1086888 13719904 0 0 0 10 3345 4870 0 1 99 0 0123456 |
上述的例子中 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 可能存在瓶颈或异常;
04、mpstat – P ALL 1
$ mpstat -P ALL | |
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 05/30/2018 _x86_64_ (16 CPU) | |
04:03:55 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle | |
04:03:55 PM all 3.67 0.00 0.61 0.71 0.00 0.00 0.00 0.00 0.00 95.02 | |
04:03:55 PM 0 3.52 0.00 0.57 0.76 0.00 0.00 0.00 0.00 0.00 95.15 | |
04:03:55 PM 1 3.83 0.00 0.61 0.71 0.00 0.00 0.00 0.00 0.00 94.85 | |
04:03:55 PM 2 3.80 0.00 0.61 0.60 0.00 0.00 0.00 0.00 0.00 94.99 | |
04:03:55 PM 3 3.68 0.00 0.58 0.60 0.00 0.00 0.00 0.00 0.00 95.13 | |
04:03:55 PM 4 3.54 0.00 0.57 0.60 0.00 0.00 0.00 0.00 0.00 95.30 | |
[...]1234567891011 |
05、pidstat 1
$ pidstat 1 | |
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU) | |
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command | |
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0 | |
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave | |
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java | |
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java | |
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java | |
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat | |
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command | |
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave | |
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java | |
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java | |
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass | |
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat | |
^C123456789101112131415161718 |
该命令用于打印各个进程对 CPU 的占用情况,类似 top 命令中显示的内容。pidstat 的优势在于,可以滚动的打印进程运行情况,而不像 top 那样会清屏。
上述例子中,%CPU 中两个 java 进程的 cpu 利用率分别达到了 1590% 和 1573%,表示 java 进程占用了 16 颗 CPU。
06、iostat – xz 1
类似 vmstat,第一次输出的是从系统开机到统计这段时间的采样数据;
$ iostat -xz 1 | |
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU) | |
avg-cpu: %user %nice %system %iowait %steal %idle | |
73.96 0.00 3.73 0.03 0.06 22.21 | |
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util | |
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09 | |
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25 | |
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26 | |
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04 | |
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00 | |
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.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%,则表示设备出现性能异常;
07、free – m
$ free -m | |
total used free shared buffers cached | |
Mem: 245998 24545 221453 83 59 541 | |
-/+ buffers/cache: 23944 222053 | |
Swap: 0 0 012345 |
检查的列:
· 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 占用的部分。
08、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 -n DEV 1 | |
Linux 3.10.0-229.el7.x86_64 (localhost.localdomain) 05/31/2018 _x86_64_ (16 CPU) | |
03:54:57 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s | |
03:54:58 PM ens32 3286.00 7207.00 283.34 18333.90 0.00 0.00 0.00 | |
03:54:58 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 | |
03:54:58 PM vethe915e51 0.00 0.00 0.00 0.00 0.00 0.00 0.00 | |
03:54:58 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 | |
03:54:58 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s | |
03:54:59 PM ens32 3304.00 7362.00 276.89 18898.51 0.00 0.00 0.00 | |
03:54:59 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 | |
03:54:59 PM vethe915e51 0.00 0.00 0.00 0.00 0.00 0.00 0.00 | |
03:54:59 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 | |
^C123456789101112131415 |
· IFACE,网络接口名称;
· rxpck/s,每秒接收到包数;
· txpck/s,每秒传输的报数;(transmit packages)
· rxkB/s,每秒接收的千字节数;
· txkB/s,每秒发送的千字节数;
· rxcmp/s,每秒接收的压缩包的数量;
· txcmp/s,每秒发送的压缩包的数量;
· rxmcst/s,每秒接收的组数据包数量;
09、sar -n TCP,ETCP 1
该命令可以用于粗略的判断网络的吞吐量,如发起的网络连接数量和接收的网络连接数量;
· TCP, 报告关于 TCPv4 网络流量的统计信息;
· ETCP, 报告有关 TCPv4 网络错误的统计信息;
$ sar -n TCP,ETCP 1 | |
Linux 3.10.0-514.26.2.el7.x86_64 (aushop) 05/31/2018 _x86_64_ (2 CPU) | |
04:16:27 PM active/s passive/s iseg/s oseg/s | |
04:16:44 PM 0.00 2.00 15.00 13.00 | |
04:16:45 PM 0.00 3.00 126.00 203.00 | |
04:16:46 PM 0.00 0.00 99.00 99.00 | |
04:16:47 PM 0.00 0.00 18.00 9.00 | |
04:16:48 PM 0.00 0.00 5.00 6.00 | |
04:16:49 PM 0.00 0.00 1.00 1.00 | |
04:16:50 PM 0.00 1.00 4.00 4.00 | |
04:16:51 PM 0.00 3.00 171.00 243.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 命令包含更多的指标统计,相当于一个综合命令。
$ top | |
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92 | |
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie | |
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st | |
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers | |
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem | |
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND | |
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java | |
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave | |
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top | |
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java | |
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java | |
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init | |
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd | |
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0 | |
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H | |
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0 | |
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched12345678910111213141516171819 |
总结:
下面的图片很好的展示了各个命令的主要作用,如使用 vmstat 查看系统的整体性能,mpstat 用于查看 cpu 的性能,pidstat 用于查看进程的状态,iostat 用于查看 io 的状态,free 用于产看内存的状态,sar 用于产看网络的状态等。

Linux 常用性能工具一览

以上就是马哥教育今天为大家分享的关于 Linux 运维必备的 Linux 性能检测常用命令汇总的文章,希望本篇文章能够对正在从事 Linux 运维工作的小伙伴们有所帮助想要了解更多 Linux 相关知识记得关注马哥教育官网。最后祝愿小伙伴们工作顺利!
声明:文章来源于网络,侵删!
