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

olei 2,481 views 6

uptime

$ uptime
11:50:22 up 112 days, 23:58,  1 user,  load average: 0.00, 0.00, 0.00
  • 该命令可以大致的看出计算机的整体负载情况,load average 后的数字分别表示计算机在 1min、5min、15min 内的平均负载。

dmesg | tail

$ dmesg | tail
[9763086.775830] [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:32:21:01:fe:ee:ff:ff:ff:ff:08:00 SRC=192.166.219.136 DST=10.154.173.244 LEN=52 TOS=0x00 PREC=0x00 TTL=47 ID=52781 PROTO=TCP SPT=60592 DPT=80 WINDOW=501 RES=0x00 ACK FIN URGP=0
[9763099.437109] [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:32:21:01:fe:ee:ff:ff:ff:ff:08:00 SRC=192.166.219.136 DST=10.154.173.244 LEN=52 TOS=0x00 PREC=0x00 TTL=47 ID=52782 PROTO=TCP SPT=33392 DPT=80 WINDOW=496 RES=0x00 ACK FIN URGP=0
[9763113.794092] [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:32:21:01:fe:ee:ff:ff:ff:ff:08:00 SRC=109.248.9.251 DST=10.154.173.244 LEN=40 TOS=0x00 PREC=0x00 TTL=238 ID=15434 PROTO=TCP SPT=43204 DPT=2122 WINDOW=1024 RES=0x00 SYN URGP=0
[9763115.232853] [UFW BLOCK] IN=eth0 OUT= MAC=52:54:00:32:21:01:fe:ee:ff:ff:ff:ff:08:00 SRC=122.192.13.180 DST=10.154.173.244 LEN=81 TOS=0x08 PREC=0x60 TTL=51 ID=17973 PROTO=UDP SPT=49713 DPT=443 LEN=61
  • 打印内核环形缓存区中的内容,可以用来查看一些错误,通过dmesg可以快速判断是否有导致系统性能异常的问题

上面例子的意思是防火墙被锁,原因是用的是云服务商的机子,端口之类的不是防火墙这个来设置,是在安全组里面设置

vmstat

$ 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
  • 打印进程、内存、交换分区、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
 0  0      0 210456 116996 709272    0    0     1    11    1    1  0  0 99  0  0
 0  0      0 210116 117000 709288    0    0     0    32  145  231  0  0 99  0  0
 0  0      0 210332 117008 709256    0    0     0    20  179  305  0  0 99  0  0

上述的例子中 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 可能存在瓶颈或异常;

mpstat -P ALL 1

执行这个,首先需要安装一个包,ubuntu为例

$ apt install sysstat
$ 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
[...]
  • 该命令用于每秒打印一次每个CPU的统计信息,可用于查看CPU的调度是否均匀。

pidstat 1

执行这个,首先需要安装一个包,ubuntu为例

$ apt install sysstat
$ pidstat 1
Linux 4.4.0-53-generic (VM-173-244-ubuntu) 	09/20/2018 	_x86_64_	(2 CPU)

12:05:11 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command

12:05:12 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command

12:05:13 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
12:05:14 PM     0     18026    0.00    1.00    0.00    1.00     0  pidstat

12:05:14 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
12:05:15 PM     0     18026    0.00    1.00    0.00    1.00     0  pidstat
  • 该命令用于打印各个进程对 CPU 的占用情况,类似 top 命令中显示的内容。pidstat 的优势在于,可以滚动的打印进程运行情况,而不像 top 那样会清屏。

iostat -xz 1

  • 类似 vmstat,第一次输出的是从系统开机到统计这段时间的采样数据;
$ iostat -xz 1 3
Linux 4.4.0-53-generic (VM-173-244-ubuntu) 	09/20/2018 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.31    0.00    0.14    0.07    0.00   99.47

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     2.80    0.21    1.82     2.83    20.98    23.54     0.03   14.02    4.23   15.13   1.11   0.22

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    1.01    0.00   98.99

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00    17.00    0.00    8.00     0.00   100.00    25.00     0.11   14.00    0.00   14.00   2.00   1.60

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.50    0.00    0.00   99.50

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util

检查列

  • 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%,则表示设备出现性能异常;

free -m

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1872         859         205          20         807         800
Swap:             0           0           0

检查的列:

  • 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 占用的部分。

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 3
Linux 4.4.0-53-generic (VM-173-244-ubuntu) 	09/20/2018 	_x86_64_	(2 CPU)

12:09:54 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:09:55 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:09:55 PM      eth0     11.00      8.00      0.71      0.88      0.00      0.00      0.00      0.00

12:09:55 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:09:56 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:09:56 PM      eth0     12.00     12.00      0.82      1.34      0.00      0.00      0.00      0.00

12:09:56 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
12:09:57 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:09:57 PM      eth0     18.00     18.00      1.34      3.31      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0     13.67     12.67      0.95      1.84      0.00      0.00      0.00      0.00
  • IFACE ,网络接口名称;
  • rxpck/s ,每秒接收到包数;
  • txpck/s ,每秒传输的报数;(transmit packages)
  • rxkB/s ,每秒接收的千字节数;
  • txkB/s ,每秒发送的千字节数;
  • rxcmp/s ,每秒接收的压缩包的数量;
  • txcmp/s ,每秒发送的压缩包的数量;
  • rxmcst/s,每秒接收的组数据包数量;

sar -n TCP,ETCP 1

  • 该命令可以用于粗略的判断网络的吞吐量,如发起的网络连接数量和接收的网络连接数量;
  • TCP, 报告关于TCPv4网络流量的统计信息;
  • ETCP, 报告有关TCPv4网络错误的统计信息;
$ sar -n TCP,ETCP 1 3
Linux 4.4.0-53-generic (VM-173-244-ubuntu) 	09/20/2018 	_x86_64_	(2 CPU)

12:20:11 PM  active/s passive/s    iseg/s    oseg/s
12:20:12 PM      1.00      0.00     17.00     14.00

12:20:11 PM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:20:12 PM      0.00      0.00      0.00      0.00      0.00

12:20:12 PM  active/s passive/s    iseg/s    oseg/s
12:20:13 PM      0.00      0.00      2.00      1.00

12:20:12 PM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:20:13 PM      0.00      0.00      1.00      0.00      0.00

12:20:13 PM  active/s passive/s    iseg/s    oseg/s
12:20:14 PM      1.00      0.00      9.00      8.00

12:20:13 PM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:20:14 PM      0.00      0.00      1.00      0.00      0.00

Average:     active/s passive/s    iseg/s    oseg/s
Average:         0.67      0.00      9.33      7.67

Average:     atmptf/s  estres/s retrans/s isegerr/s   orsts/s
Average:         0.00      0.00      0.67      0.00      0.00

检测的列:

  • 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,重传的数量;

top

  • top 命令包含更多的指标统计,相当于一个综合命令。
$ top
top - 12:21:47 up 113 days, 29 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 180 total,   1 running, 179 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1917264 total,   209296 free,   880528 used,   827440 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   819588 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  365 root       0 -20       0      0      0 S   0.3  0.0   0:45.27 kworker/0:1H
 1688 root      20   0 1446872   9028   3416 S   0.3  0.5 104:46.91 YDService
18955 root      20   0   40816   3816   3168 R   0.3  0.2   0:00.02 top
    1 root      20   0  119876   5248   3200 S   0.0  0.3   2:01.38 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.04 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   1:06.88 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
    7 root      20   0       0      0      0 S   0.0  0.0  25:42.90 rcu_sched
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
    9 root      rt   0       0      0      0 S   0.0  0.0   0:13.97 migration/0
   10 root      rt   0       0      0      0 S   0.0  0.0   0:42.65 watchdog/0
   11 root      rt   0       0      0      0 S   0.0  0.0   0:34.21 watchdog/1
   12 root      rt   0       0      0      0 S   0.0  0.0   0:14.00 migration/1
   13 root      20   0       0      0      0 S   0.0  0.0   0:58.51 ksoftirqd/1
   15 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H

这个命令占全屏,可以按q键退出

总结

  • 下面的图片很好的展示了各个命令的主要作用,如使用vmstat查看系统的整体性能,mpstat用于查看cpu的性能,pidstat用于查看进程的状态,iostat用于查看io的状态,free用于产看内存的状态,sar用于产看网络的状态等。

stat.png

发表评论 取消回复
表情 图片 链接 代码

  1. 云南普洱茶

    不错,涨姿势了

  2. 杰新博客

    杰新博客来访[aru_11]

分享