当你在IDC主机商购买一台系统为 Linux 服务器之后,我想大家第一时间就是对主机进行一个性能分析,这里我跟大家分享几个命令,能让大家在一分钟以内对自己的性能有一个大致的鸟解?
uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top
这10个命令到底是什么意思,我为大家一一解释一下:
1.uptime
# uptime 03:16:26 up 21:31, 1 user, load average: 10.02, 06.43, 09.02
在上面的例子中,平均负载显示是在不断增加的,1 分钟的值是 10,相比 15 分钟的值 09 来说是增加了。这个数字这么大就意味着有事情发生了.
2. dmesg | tail
# dmesg | tail [ 14.102501] ISO 9660 Extensions: RRIP_1991A [ 15.900216] ISO 9660 Extensions: Microsoft Joliet Level 3 [ 15.900234] ISO 9660 Extensions: RRIP_1991A [ 17.030540] EXT4-fs (vda1): resizing filesystem from 5242619 to 13106939 blocks [ 17.151434] random: crng init done [ 17.151436] random: 7 urandom warning(s) missed due to ratelimiting [ 18.314268] EXT4-fs (vda1): resized filesystem to 13106939 [ 20.394666] new mount options do not match the existing superblock, will be ignored [ 38.405804] ISO 9660 Extensions: Microsoft Joliet Level 3 [ 38.407599] ISO 9660 Extensions: RRIP_1991A
这里展示的是最近 10 条系统消息日志,如果系统消息没有就不会展示。主要是看由于性能问题导致的错误。
3. 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 1 0 0 324644 141184 1270628 0 0 10 40 207 431 1 1 99 0 0 0 0 0 324388 141184 1270628 0 0 0 0 130 280 1 1 98 0 0 0 0 0 324388 141184 1270628 0 0 0 0 89 169 0 0 100 0 0 0 0 0 324420 141184 1270628 0 0 0 0 118 225 1 0 99 0 0 0 0 0 324420 141184 1270628 0 0 0 32 125 254 0 0 99 1 0 1 1 0 324420 141184 1270628 0 0 0 68 96 171 0 0 96 4 0 0 0 0 324452 141184 1270628 0 0 0 184 127 166 0 1 96 3 0 ^C
# mpstat -P ALL 1 Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)
03:33:26 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
03:33:27 AM all 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 99.00
03:33:27 AM 0 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 99.00
这个命令打印各个 CPU 的时间统计,可以看出整体 CPU 的使用是不是均衡的。由于我使用的是1H2G主机看不出区别!
5. pidstat 1
# pidstat 1 Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU) 03:34:47 AM UID PID %usr %system %guest %wait %CPU CPU Command 03:34:48 AM 0 1120 1.00 0.00 0.00 0.00 1.00 0 sshd
pidstat 命令为每个 CPU 统计信息功能。由于我使用的是1H2G主机看不出区别!
6. iostat -xz 1
# iostat -xz 1 Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.67 0.01 0.52 0.29 0.00 98.52 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.22 0.00 0.00 9.64 0.00 0.00 0.00 scd0 0.02 0.00 0.48 0.00 0.00 0.00 0.00 0.00 0.21 0.00 0.00 27.72 0.00 0.19 0.00 vda 0.64 4.07 9.15 40.59 0.00 1.99 0.00 32.85 3.58 2.31 0.01 14.31 9.96 0.24 0.11 avg-cpu: %user %nice %system %iowait %steal %idle 0.00 0.00 0.00 0.00 0.00 100.00 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
ubuntu@VM-0-17-ubuntu:~# free -m total used free shared buff/cache available Mem: 1833 137 313 5 1381 1506 Swap: 0 0 0 ubuntu@VM-0-17-ubuntu:~$ free -h total used free shared buff/cache available Mem: 1.8G 139M 311M 5.8M 1.3G 1.5G Swap: 0B 0B 0B这个命令我相信大家都熟悉,buffers:用于块设备 I/O 缓冲的缓存,cached:用于文件系统的页缓存。
8. sar -n DEV 1
ubuntu@VM-0-17-ubuntu:~# sar -n DEV 1 Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU) 03:43:35 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 03:43:36 AM eth0 11.00 10.00 0.79 1.06 0.00 0.00 0.00 0.00 03:43:36 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
使用这个工具是可以检测网络接口的吞吐:rxkB/s 和 txkB/s,作为收发数据负载的度量,也是检测是否达到收发极限。在上面这个例子中,eth0 接收数据达到 0.79 kb 字节/秒,发送数据达到1.06 字节/秒。
9. sar -n TCP,ETCP 1
ubuntu@VM-0-17-ubuntu:~# sar -n TCP,ETCP 1 Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU) 03:49:56 AM active/s passive/s iseg/s oseg/s 03:49:57 AM 0.00 0.00 5.05 3.03 03:49:56 AM atmptf/s estres/s retrans/s isegerr/s orsts/s 03:49:57 AM 0.00 0.00 0.00 0.00 0.00
这是对 TCP 关键指标的统计,它包含了以下内容:
ubuntu@VM-0-17-ubuntu:~# top top - 03:53:20 up 1 day, 1:41, 1 user, load average: 0.01, 0.04, 0.00 Tasks: 89 total, 1 running, 52 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1877076 total, 317436 free, 143420 used, 1416220 buff/cache KiB Swap: 0 total, 0 free, 0 used. 1540856 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3730 root 20 0 105688 6812 5840 S 0.3 0.4 0:00.01 sshd
7546 root 20 0 644608 14924 6776 S 0.3 0.8 2:48.99 YDService
1 root 20 0 159892 9260 6796 S 0.0 0.5 0:06.45 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:04.29 ksoftirqd/0
8 root 20 0 0 0 0 I 0.0 0.0 0:08.85 rcu_sched
9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh
10 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
11 root rt 0 0 0 0 S 0.0 0.0 0:00.16 watchdog/0
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
top 命令包含了很多我们前面提到的指标。这个命令可以很容易看出指标的变化表示负载的变化,这个看起来和前面的命令有很大不同。
top 的一个缺陷也比较明显,很难看出变化趋势,其它像 vmstat 和 pidstat 这样的工具就会很清晰,它们是以滚动的方式输出统计信息。所以如果你在看到有问题的信息时没有及时的暂停下来(Ctrl-S 是暂停, Ctrl-Q 是继续),那么这些有用的信息就会被清屏。