系统工具(uptime,vmstat,iostat,top)

linux 系统工具


top vmstat iostat uptime

介绍四个工具, uptime用于查看系统负载, vmstat用于查看虚拟内存状态, iostat用于统计CPU和设备IO信息, top工具动态显示 进程状态,还包括 系统负载虚拟内存状态cpu和内存使用率。我们将对几个工具逐一进行说明。

uptime

显示内容

  • 当前时间
  • 系统已启动的时间
  • 当前上线人数
  • 系统平均负载(1、5、10分钟的平均负载,一般不会超过1)

系统平均负载:
指在特定时间间隔内运行队列中的平均进程数,通常每个CPU内核的当前活动进程数不大于3, 那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题。如果linux主机是1个双核CPU,当LoadAverage为6的时候说明机器已经被充分使用。
我们可以使用命令uptime查看系统负载情况。

[root@CT731 ~]#uptime
 20:37:03 up 2 days,  2:54,  5 users,  load average: 0.00, 0.01, 0.05

uptime还有一些小的选项,比如uptime -p显示开机了多久,精确到分钟。还有uptime -s显示系统开机时间。

[root@CT731 hexo]#uptime -p
up 2 days, 3 hours, 9 minutes
[root@CT731 hexo]#uptime -s
2017-09-07 17:42:47

vmstat

vmstat命令的含义为显示虚拟内存状态Viryual Memorn Statics,同时,它可以报告关于进程内存I/O等系统整体运行状态,如下:

[root@CT731 ~]#vmstat 
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   2456 550500    984 679940    0    0     2     6   34   37  0  0 99  0  0

在上面的代码中,我们看到了很多的项:
1.procs是表示进程状态,r代表可运行(正在运行或等待运行)进程的个数,和核心数有关。b代表处于不可中断睡眠态的进程个数(被阻塞的队列的长度)。

2.memory表示内存状态,其中swpd是指交换内存的使用总量,free是空闲物理内存总量,buff指用户buffer的内存总量,cache是用于cache的内存总量。

3.swap是指交换分区的状态,si代表从磁盘交换进内存的数据速率(kb/s)[从交换分区到内存]so代表从内存交换至磁盘的数据速率(kb/s)[从内存到交换分区]

4.io项中,bi代表从块设备读入数据到系统的速率(kb/s)[从块设备读数据到内存]bo代表保存数据至块设备的速率(kb/s)[从内存度数据到块设备]

5.system项中,in代表interrupts 中断速率,包括时钟,cs代表context switch 进程切换速率。

6.cpu项中,us代表Time spent running non-kernel code,sy代表Time spent running kernel code,id代表Time spent idle. Linux 2.5.41前,包括IO-wait time,wa代表Time spent waiting for IO. 2.5.41前,包括in idle,st代表Time stolen from a virtual machine. 2.6.11前, unknown。

此外,vmstat还有一些选项,vmstat 2表示每2秒刷新一次,vmstat 2 5表示每2秒刷新一次,共刷新5次。

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   2456 552148    984 682056    0    0     1     6   34   37  0  0 99  0  0
 0  0   2456 552024    984 682056    0    0     0     0   50   70  0  0 100  0  0
 0  0   2456 552024    984 682056    0    0     0     0   55   81  0  0 100  0  0
 0  0   2456 552024    984 682056    0    0     0     0   50   72  0  0 100  0  0
 0  0   2456 552024    984 682056    0    0     0     0   47   67  0  0 100  0  0

vmstat -s则会以表的形式显示上面的信息。

[root@CT731 ~]#vmstat -s
      1867292 K total memory
       632352 K used memory
       195712 K active memory
       792804 K inactive memory
       551900 K free memory
         ... ...

iostat

iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
选项:
-c:仅显示CPU使用情况
-d:仅显示设备利用率
-k:显示状态以千字节每秒为单位,而不使用块每秒
-m:显示状态以兆字节每秒为单位
-p:仅显示块设备和所有被使用的其他分区的状态
-t:显示每个报告产生时的时间
-x:显示扩展状态
我使用iostat命令,显示以下信息:

[root@CT731 ~]#iostat
Linux 3.10.0-514.el7.x86_64 (CT731)     09/10/2017      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.34    0.00    0.17    0.03    0.00   99.46

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.47         4.95        21.76    1027014    4514774
scd0              0.01         0.50         0.00     103986          0

我们可以从中看到cpu的部分信息,和磁盘的信息。在磁盘信息中:
tps:该设备每秒的传输次数
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
同样的,我们可以使用iostat 2iostat 2 5动态刷新信息。

[root@CT731 ~]#iostat 2 5
Linux 3.10.0-514.el7.x86_64 (CT731)     09/10/2017      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.33    0.00    0.17    0.03    0.00   99.46

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.47         4.93        21.67    1027014    4515997
scd0              0.01         0.50         0.00     103986          0

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

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0
scd0              0.00         0.00         0.00          0          0

接下来,我们看看选项中的示例:
iostat -c 仅显示CPU的信息

[root@CT731 ~]#iostat -c
Linux 3.10.0-514.el7.x86_64 (CT731)     09/10/2017      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.33    0.00    0.17    0.03    0.00   99.46

iostat -d 仅显示设备利用率

[root@CT731 ~]#iostat -d
Linux 3.10.0-514.el7.x86_64 (CT731)     09/10/2017      _x86_64_        (4 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.47         4.91        21.60    1027014    4516738
scd0              0.01         0.50         0.00     103986          0

iostat -p 仅显示块设备和所有被使用的其他分区的状态

[root@CT731 ~]#iostat -p
Linux 3.10.0-514.el7.x86_64 (CT731)     09/10/2017      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.33    0.00    0.17    0.03    0.00   99.46

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.47         4.90        21.55    1027014    4517404
sda1              0.01         0.12         0.01      26036       2124
sda2              0.34         4.28        18.83     897486    3946502
sda3              0.11         0.48         2.69      99685     564769
sda4              0.00         0.00         0.00         18          0
sda5              0.00         0.01         0.02       2628       4008
scd0              0.01         0.50         0.00     103986          0

iostat -x:显示扩展状态

[root@CT731 ~]#iostat -x
Linux 3.10.0-514.el7.x86_64 (CT731)     09/10/2017      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.33    0.00    0.17    0.03    0.00   99.46

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.20    0.17    0.30     4.90    21.54   112.94     0.03   57.20   16.40   80.30   4.04   0.19
scd0              0.00     0.00    0.01    0.00     0.50     0.00   129.42     0.00    3.22    3.22    0.00   2.70   0.00

rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rKB/s:每秒向设备发出的读取请求数
wKB/s:每秒向设备发出的写入请求数
avgrq-sz: 平均请求扇区的大小
avgqu-sz: 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm: 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

在这里我们在介绍一个命令pmap,它用于报告进程的内存映射关系,是Linux上调试及运维一个相当不错的工具。
选项:
-x:显示扩展格式;
-d:显示设备格式;
-q:不显示头尾行;
我们配合pidof命令查找ping 172.17.0.1的进程ID,查看其映射关系。

[root@CT731 ~]#pidof ping
123245
[root@CT731 ~]#pmap 123245
123245:   ping 127.0.0.1
00007efdbd000000 103588K r---- locale-archive
00007efdc3529000     84K r-x-- libz.so.1.2.7
00007efdc353e000   2044K ----- libz.so.1.2.7
00007efdc373d000      4K r---- libz.so.1.2.7
... ...
00007efdc5076000      4K r---- ping
00007efdc5077000      4K rw--- ping
00007fffe27f7000      8K r-x--   [ anon ]
ffffffffff600000      4K r-x--   [ anon ]
 total           127912K

top

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,还可以通过命令管理。

top - 16:36:51 up 2 days, 10:34,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 192 total,   1 running, 191 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1867292 total,   571368 free,   591152 used,   704772 buff/cache
KiB Swap:  4194300 total,  4191848 free,     2452 used.   994920 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND            
 21517 root      20   0  377524  18108  14144 S   0.3  1.0   3:25.88 vmtoolsd           
     1 root      20   0  193628   5504   3208 S   0.0  0.3   0:37.55 systemd            
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.43 kthreadd     
     3 root      20   0       0      0      0 S   0.0  0.0   0:28.06 ksoftirqd/0

%CPU一栏中:
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间

top命令还有选项可用,top -d #[1]指定刷新时间,默认三秒,top -b全部显示所有进程,top -n #[1]刷新多少次后退出。

还有就是我们可以直接使用内置命令对命令的显示内容进程调整,以便得到我们想要的结果:
我们可以使用P以占据的CPU百分比[%CPU]进行排序,M以占据内存百分比[%MEM]排序,T以累积占据CPU时长[TIME+]排序。
对于首部的信息,我们可以以l命令对uptime信息关闭或打开,以t命令对cup和进程状态以不同的格式显示,或者关闭;以m命令对memory信息以不同格式进行显示或关闭;或者1命令更改CPU信息的显示格式。
除了这些外,还有s更改刷新时间,k置顶终止指定进程,W保存文件,q退出。


  1. 这里的#代表数字[0-]。 ↩ ↩

你可能感兴趣的:(系统工具(uptime,vmstat,iostat,top))