动态语言Ruby Python

十条命令 一分钟内了解 系统资源

2018-12-04  本文已影响23人  运维开发_西瓜甜

摘自 IBM 非原创

简单介绍

  1. uptime
  2. dmesg | tail
  3. vmstat 1
  4. mpstat -P ALL 1
  5. pidstat 1
  6. iostat -xz 1
  7. free -m
  8. sar -n DEV 1
  9. sar -n TCP,ETCP 1
  10. top
其中一些命令需要安装sysstat包,有一些由procps包提供。

uptime

$ uptime
19:19  up 1 day, 10:12, 5 users, load averages: 2.02 1.97 1.84

在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。
这些数据可以让我们对系统资源使用有一个宏观的了解。

dmesg | tail

$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

vmstat 1

$ vmstat  1

$ vmstat   1   10

介绍一些和性能调优相关的列

mpstat -P ALL 1

$ mpstat -P  ALL  1

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
^C

iostat -xz 1

$ 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
[...]
^C

该命令输出的列,主要含义是:

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

free -m

$ free -m
             total       used       free     shared    buffers     cached
Mem:        245998      24545     221453         83         59        541
-/+ buffers/cache:      23944     222053
Swap:            0          0          0
最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

sar -n DEV 1

$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)
12:17:19 AM  active/s passive/s    iseg/s    oseg/s
12:17:20 AM      1.00      0.00  10233.00  18846.00
12:17:19 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:17:20 AM      0.00      0.00      0.00      0.00      0.00
12:17:20 AM  active/s passive/s    iseg/s    oseg/s
12:17:21 AM      1.00      0.00   8359.00   6039.00
12:17:20 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
12:17:21 AM      0.00      0.00      0.00      0.00      0.00

字段含义:

TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。

top

Processes: 319 total, 2 running, 317 sleeping, 1163 threads                     20:19:01
Load Avg: 2.28, 2.05, 1.99  CPU usage: 4.55% user, 6.23% sys, 89.20% idle
SharedLibs: 176M resident, 46M data, 19M linkedit.
MemRegions: 46532 total, 2652M resident, 126M private, 839M shared.
PhysMem: 7048M used (1197M wired), 1141M unused.
VM: 857G vsize, 627M framework vsize, 108522(0) swapins, 131439(0) swapouts.
Networks: packets: 1105387/1215M in, 785149/77M out.
Disks: 479919/31G read, 404844/49G written.

PID    COMMAND      %CPU TIME     #TH   #WQ  #PORT MEM    PURG   CMPRS  PGRP  PPID
56978  top          4.0  00:00.53 1/1   0    20    2544K  0B     0B     56978 51030
56975  quicklookd   0.0  00:00.09 4     1    88    4256K  32K    0B     56975 1
56720  mdworker     0.0  00:00.07 3     1    49    3032K  0B     0B     56720 1
56719  mdworker     0.0  00:00.06 3     1    49    2936K  0B     0B     56719 1
56677  Google Chrom 0.2  01:17.58 20    2    162   99M    0B     0B     435   435
56664  ocspd        0.0  00:00.02 2     1    35    1612K  0B     0B     56664 1
56340  com.apple.Co 0.0  00:00.06 2     2    38    400K   0B     2464K  56340 1
56317  netbiosd     0.0  00:00.06 2     2    30    1036K  0B     1480K  56317 1
56147  com.apple.sp 0.0  00:00.04 2     1    48    336K   0B     2032K  56147 1
56107  mdworker     0.0  00:00.18 3     1    58    3216K  0B     1876K  56107 1
56093  MTLCompilerS 0.0  00:00.09 2     2    32    11M    0B     8192B  56093 1
56072  mdworker     0.0  00:02.51 4     1    47    12M    0B     676K   56072 1
56071  mdworker     0.0  00:02.52 4     1    47    14M    0B     428K   56071 1
56070  mdworker     0.0  00:02.79 4     1    54    15M    0B     2140K  56070 1

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

总结

排查系统性能的命令其实还有很多工具,这里就不多做介绍了,因为我熟悉的也就这么几个哈哈。

上一篇下一篇

猜你喜欢

热点阅读