使用九条命令检查Linux服务器性能

1.uptime

[root@i-78p1k0qz ~]# uptime

 09:54:48 up 22 days, 22:15,  1 user,  load average: 0.05, 0.03, 0.03

uptime命令显示系统已经运行了多长时间,它依次显示下列信息:当前时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。这些数据可以让我们对系统资源使用有一个宏观的了解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在面临高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。

 

 

 

2.dmesg

[root@i-78p1k0qz ~]# dmesg

sd 2:0:0:0: [sda] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB)

sd 2:0:0:2: [sdb] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)

sd 2:0:0:1: [sdc] 4194304 512-byte logical blocks: (2.14 GB/2.00 GiB)

sd 2:0:0:0: [sda] Write Protect is off

sd 2:0:0:0: [sda] Mode Sense: 63 00 00 08

sd 2:0:0:2: [sdb] Write Protect is off

sd 2:0:0:2: [sdb] Mode Sense: 63 00 00 08

sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

sd 2:0:0:2: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

sd 2:0:0:1: [sdc] Write Protect is off

sd 2:0:0:1: [sdc] Mode Sense: 63 00 00 08

sd 2:0:0:1: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

该命令可以输出系统日志,dmesg  | tail  可以输出系统日志的最后10行,这些日志也可以帮助排查系统性能问题

 

 

 

3.vmstat

[root@i-78p1k0qz ~]# 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

 0  0     96 495444 113512 293084    0    0     1     6    2    4  0  0 99  0  0

 0  0     96 496940 113512 293080    0    0     0     0   46   87  0  0 100  0  0

 0  0     96 495536 113512 293084    0    0     0     0   94  123  4  1 95  0  0

 0  0     96 495536 113512 293084    0    0     0     0   33   52  0  0 100  0  0

 0  0     96 495536 113512 293092    0    0     0    28   46   82  0  0 99  1  0

 0  0     96 495536 113512 293092    0    0     0     8   52   66  1  0 99  0  0

 0  0     96 495188 113512 293092    0    0     0     0   57   69  0  1 99  0  0

^C

[root@i-78p1k0qz ~]#

vmstat命令:每行会输出一些系统核心的指标,这些指标可以让我们更详细的了解系统状态。

 

后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义

 

r:等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。

 

free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情况。

 

siso:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。

 

us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机消耗)。

 

上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO

 

 

 

4.mpstat

yum  install   sysstat  安装此命令

 

[root@i-78p1k0qz ~]# mpstat -P ALL 1

Linux 2.6.32-431.29.2.el6.x86_64 (i-78p1k0qz) 20171124 _x86_64_ (1 CPU)

 

100549秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle

100550秒  all    3.00    0.00    1.00    1.00    0.00    0.00    0.00    0.00   95.00

100550秒    0    3.00    0.00    1.00    1.00    0.00    0.00    0.00    0.00   95.00

 

100550秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle

100551秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

100551秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

 

100551秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle

100552秒  all    1.98    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.02

100552秒    0    1.98    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.02

 

100552秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle

100553秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

100553秒    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的

 

 

 

5.pidstat

[root@i-78p1k0qz ~]# pidstat 1

Linux 2.6.32-431.29.2.el6.x86_64 (i-78p1k0qz) 20171124 _x86_64_ (1 CPU)

 

100635秒       PID    %usr %system  %guest    %CPU   CPU  Command

100636秒      3054    1.00    0.00    0.00    1.00     0  sshd

 

100636秒       PID    %usr %system  %guest    %CPU   CPU  Command

 

100637秒       PID    %usr %system  %guest    %CPU   CPU  Command

100638秒       777    0.00    1.01    0.00    1.01     0  gapd

100638秒      3054    1.01    0.00    0.00    1.01     0  sshd

 

100638秒       PID    %usr %system  %guest    %CPU   CPU  Command

100639秒      3056    0.00    1.00    0.00    1.00     0  pidstat

 

100639秒       PID    %usr %system  %guest    %CPU   CPU  Command

 

100640秒       PID    %usr %system  %guest    %CPU   CPU  Command

100641秒      3056    0.00    1.00    0.00    1.00     0  pidstat

^C

pidstat命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态

 

 

 

6.iostat

[root@i-78p1k0qz ~]# iostat -xz 1

Linux 2.6.32-431.29.2.el6.x86_64 (i-78p1k0qz) 20171124 _x86_64_ (1 CPU)

 

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           0.48    0.00    0.17    0.02    0.01   99.32

 

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

sda               0.00     0.74    0.01    0.78     1.24    12.19    16.94     0.00    0.89    7.76    0.81   0.44   0.03

sdb               0.00     0.00    0.00    0.00     0.00     0.00     8.18     0.00    0.21    0.10    8.62   0.21   0.00

sdc               0.00     0.00    0.00    0.00     0.00     2.12  9952.93     0.00    9.09    8.63   57.00   9.09   0.00

 

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           1.00    0.00    1.00    0.00    0.00   98.00

 

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

sda               0.00     6.00    0.00    4.00     0.00    80.00    20.00     0.00    0.25    0.00    0.25   0.25   0.10

 

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           0.00    0.00    0.00    0.00    0.00  100.00

 

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

 

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           0.00    0.00    0.00    0.00    0.00  100.00

 

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

sda               0.00     4.00    0.00    4.00     0.00    64.00    16.00     0.00    0.00    0.00    0.00   0.00   0.00

 

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           1.00    0.00    0.00    0.00    0.00   99.00

 

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

sda               0.00     0.00    0.00    2.00     0.00    16.00     8.00     0.01    3.00    0.00    3.00   1.50   0.30

 

r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。

 

awaitIO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障

 

avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)

 

%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。

 

如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。

 

 

 

7.free

[root@i-78p1k0qz ~]# free -m

             total       used       free     shared    buffers     cached

Mem:           996        513        483          0        111        286

-/+ buffers/cache:        115        880

Swap:         2047          0       2047

free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。

 

这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

 

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。

 

 

 

8.sar

[root@i-78p1k0qz ~]# sar -n DEV 1

Linux 2.6.32-431.29.2.el6.x86_64 (i-78p1k0qz) 20171124 _x86_64_ (1 CPU)

 

101008秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

101009秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

101009秒      eth0      7.00      2.00      0.52      0.31      0.00      0.00      0.00

101009秒      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

101009秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

101010秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

101010秒      eth0      1.00      1.00      0.06      0.06      0.00      0.00      0.00

101010秒      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

101010秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

101011秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

101011秒      eth0      8.00      3.00      0.50      1.01      0.00      0.00      0.00

101011秒      eth1     14.00      0.00      1.02      0.00      0.00      0.00      0.00

 

101011秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

101012秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

101012秒      eth0      3.00      4.00      0.54      1.01      0.00      0.00      0.00

101012秒      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

 

101012秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s

101013秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

101013秒      eth0      3.00      2.00      0.20      0.52      0.00      0.00      0.00

101013秒      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。

 

sar -n TCP,ETCP 1

 

[root@i-78p1k0qz ~]# sar -n TCP,ETCP 1

Linux 2.6.32-431.29.2.el6.x86_64 (i-78p1k0qz) 20171124 _x86_64_ (1 CPU)

 

101052秒  active/s passive/s    iseg/s    oseg/s

101053秒      0.00      0.00      4.00      3.00

 

101052秒  atmptf/s  estres/s retrans/s isegerr/s   orsts/s

101053秒      0.00      0.00      0.00      0.00      1.00

 

101053秒  active/s passive/s    iseg/s    oseg/s

101054秒      0.00      0.00      1.00      1.00

 

101053秒  atmptf/s  estres/s retrans/s isegerr/s   orsts/s

101054秒      0.00      0.00      0.00      0.00      0.00

 

101054秒  active/s passive/s    iseg/s    oseg/s

101055秒      0.00      0.00      1.00      2.00

 

sar命令在这里用于查看TCP连接状态

 

active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;

 

passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;

 

retrans/s:每秒TCP重传数量;

 

TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。

 

 

 

9.top

top - 10:14:00 up 22 days, 22:34,  1 user,  load average: 0.00, 0.00, 0.00

Tasks:  89 total,   2 running,  87 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.7%us,  0.3%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   1020276k total,   525980k used,   494296k free,   113708k buffers

Swap:  2097148k total,       96k used,  2097052k free,   293504k cached

 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                     

 3470 root      20   0 99316 4276 3180 S  0.3  0.4   0:00.03 sshd                                                         

 3472 root      20   0 15024 1252  964 R  0.3  0.1   0:00.01 top                                                          

    1 root      20   0 19356 1300 1048 S  0.0  0.1   0:09.80 init                                                         

    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                     

    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                  

    4 root      20   0     0    0    0 S  0.0  0.0   0:02.85 ksoftirqd/0                                                  

    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                                  

    6 root      RT   0     0    0    0 S  0.0  0.0   0:02.43 watchdog/0                                                   

    7 root      20   0     0    0    0 S  0.0  0.0   1:42.65 events/0                                                     

    8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup                                                       

    9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper                                                      

   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns                                                        

   11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr                                                    

   12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm                                                           

   13 root      20   0     0    0    0 S  0.0  0.0   0:05.69 sync_supers                                                  

   14 root      20   0     0    0    0 S  0.0  0.0   0:07.16 bdi-default                                                  

   15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0                                                

   16 root      20   0     0    0    0 S  0.0  0.0   0:32.55 kblockd/0                                                    

   17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpid                                                       

   18 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify                                                 

   19 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kacpi_hotplug                                                

   20 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_aux                                                      

   21 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_sff/0                                                    

   22 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksuspend_usbd                                                

   23 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khubd                                                        

   24 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kseriod                                                      

   25 root      20   0     0    0    0 S  0.0  0.0   0:00.00 md/0                                                         

   26 root      20   0     0    0    0 S  0.0  0.0   0:00.00 md_misc/0                                                    

   27 root      20   0     0    0    0 S  0.0  0.0   0:00.06 linkwatch                                                    

   28 root      20   0     0    0    0 S  0.0  0.0   0:00.40 khungtaskd


top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。

 

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。


2019-04-06 17:48:48 通过 网页

更换一道题!