Linux-系统管理-常用命令(上)

以下介绍常用的几个系统分析的命令以及常用方法:


vmstat

vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,很多Linux发行版本都默认安装了此命令工具。当然,不止对虚拟内存有统计,还可以利用vmstat命令可以对进程状态、CPU活动等进行监视,不足就是不能对某个进程跟踪分析。

vmstat 命令语法:
vmstat [-V] [-n] [delay [count]]

-V,显示当前版本
-n,表示循环输出信息时,头部信息只出现一次。
delay,两次输出之间的时间间隔
count,表示按照“delay”指定的时间间隔统计的次数,默认为1
[root@example.com ~]# vmstat  1 5  
        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      4852724 465532 19557332    0    0   3   33     0     0     3  0 97  0  0
        0  0   0      4853232 465532 19557340    0    0   0   176    10946 11871 6  0 94  0  0
        1  0   0      4852520 465532 19557824    0    0   0   0      11010 10857 6  1 93  0  0
        1  0   0      4853360 465532 19557672    0    0   0   5112   11034 9379  9  1 90  0  0
        3  0   0      4851908 465532 19558160    0    0   0   0      10934 9371  3  1 96  0  0
下面解释一下:
proce
    r 表示运行和等待的cpu时间片的进程数,这个值如果长期大于系统cpu线程数,说明CPU不足。
    b 表示等待资源的进程数,比如正在等待I/O或者内存交换等

memory
    swpd 表示切换到内存交换区的内存大小(单位KB),实际分析是,以si、so为准。
    free 当前空闲的内存数量
    buff 表示buffers cache 的内存数量,一般对块设备的读写才需要缓冲。
    cache page cached 的内存数量,一般作为文件系统进行缓存,,频繁访问的文件都会被缓存。如果cache值较大,说明缓存的文件数量较多,
如果此时io中的bi比较小,说明文件系统效率比较好。
swap
    si 表示由磁盘调入内存。
    so 表示有内存调入磁盘。
一般情况下,这两个值都为零

io 
    bi 从块设备读入数据的总量,既读磁盘,(KB/s)
    bo 写入快设备的数据量,既写磁盘,(KB/s))
这里bi+bo 参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘I/o有问题,考虑提升磁盘读写
system
    in 某一时间间隔内,观测到的每秒设备中断数。
    cs 列表表示每秒产生的上下文切换数。
上面这两个值越大,由内核消耗的CPU时间越多。
cpu 
    us显示用户进程消耗的cpu时间百分比。如果长期高于50%,需要考虑优化业务程序了。
    sy显示内核进程消耗的cpu时间百分比。
us+sy 大于70% 说明cpu资源有些紧张了。
    id显示cpu处于空闲的时间百分比。
    wa显示io等待所占用cpu时间的百分比,wa参考值为20%,超过20%说明io等待已经很严重了。因此等待的
    原因可能是磁盘大量随机读写,也可能是磁盘或者磁盘控制器的带宽瓶颈(主要是块级操作。)
    综述可见,对cpu评估中,重点注意procs中r列,cpu中的us、sy、id列。

sar

sar是分析系统性能的重要工具,用法如下:
sar [option] [-o filename] [interval] [count] ]

option(常用),
-A ,显示系统所有资源设备(内存,cpu,磁盘)的运行状况。
-u , 显示cpu在采样时间内的系统负载。
-P ,指定对机器的哪一个cpu进行采样。
-d ,显示系统硬盘在采样时间内的运行信息。
-r ,显示系统内存在采样时间内的使用状况。
-b ,显示缓冲区在采样时间内的使用情况。
-v ,显示进程、文件、节点和锁表状态。
-n ,显示网络运行状态,参数后面可跟DEV(显示网络接口信息)、EDEV(显示网络错误的统计数据)、SOCK(显示套接字信息)、和FULL(显示前三参数的所有信息)。
-q ,显示运行队列的大小,它与系统当时的平均浮在相同。
-R ,显示进程在采样时间内的活动情况。
-y , 显示终端设备在采样时间内的活动情况。
-w ,显示系统交换在采样时间内的活动情况。
-o filename 表示将输出结果以二进制形式输出到某个文件中。
interval ,表示采样间隔。
count , 表示采样次数,默认为1.
[@example.com ~]# sar -P 2 1 5 
Linux 2.6.18-128.el5 (example.com)     2016年09月18213824秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
2138252      0.00      0.00      0.00      0.00      0.00    100.00
2138262      0.00      0.00      0.00      0.00      0.00    100.00
2138272      0.00      0.00      0.00      0.00      0.00    100.00
2138282      0.00      0.00      0.00      0.00      0.00    100.00
2138292      0.00      0.00      0.00      1.00      0.00     99.00
Average:            2      0.00      0.00      0.00      0.20      0.00     99.80
%user:用户进程消耗的cpu时间比例。
%nice:列显示运行正常进程所消耗cpu的时间比例。
%system:显示系统进程消耗的cpu时间比例。
%iowait:列显示了io等待所消耗的cpu时间。
%steal:表示在内存相对紧张的情况下,pagein强制对不同页面进行的steal处理。
%idle:列显示了cpu在空闲状态下的时间百分比。
最后一行的average是对上面内容求的平均值。

如上,可以指定某一个cpu,对其负载监控,这样可以结果有的程序做成了单线程,这样虽然cpu整体消耗不高,但是单线程就不行了

查看机器历史性能信息
sar -b -s 10:00:00 -e  16:00:00 -f /var/log/sa/sa10
-b 磁盘缓存的使用情况,
-s 开始时间, 
-e结束时间,起始时间的格式都是:hh:mm:ss   
-f 指定sar的历史日志,默认位置在/var/log/sa/目录下
[@example.com ~]# sar -b -s 10:00:00 -e  10:50:00 -f /var/log/sa/sa10  
Linux 2.6.18-128.el5 (example.com)     20160910100001秒       tps      rtps      wtps   bread/s   bwrtn/s
10100113.83      0.12     13.71      1.63   1344.93
102001272.92    250.34     22.58   2011.54   1650.26
10300111.25      0.02     11.23      0.13   1118.80
10400111.87      0.01     11.86      0.11   1143.23
Average:        77.50     62.65     14.84    503.59   1314.32

iostat

iostat是i/o statistic的缩写,主要功能是对系统的磁盘io操作进行监视。不是linux默认安装的,需要安装一个开源的工具包sysstat,安装完毕会多出iostat、sar、mpstat三个命令。

iostat语法如下
iostat [-c|-d] [-k] [-t] [-x [device]] [interval[count] ]

-c 显示cpu的使用情况,显示的含义和sar的基本一致,不在用例说明。
-d 显示磁盘的使用情况
-k 每秒按照kb为单位显示
-t 打印出统计信息开始执行的时间。
-x device 指定要统计的磁盘设备,默认为所有磁盘设备。
interval,指定两次统计间隔的时间。
count,按照interval指定的时间间隔进行统计的次数。
[@example.com ~]# iostat -d  1 2            
Linux 2.6.18-128.el5 (example.com)     20160918日

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               8.65        34.40       569.09  886282530 14664213986
sda1              0.00         0.00         0.00       5991       2637
sda2              0.67         1.23        15.77   31779879  406401849
sda3              1.53         2.64        60.98   67940779 1571254746
sda4              0.00         0.00         0.00          6          0
sda5              1.40         1.48       277.72   38223426 7156219000
sda6              0.00         0.01         0.02     289718     555488
sda7              0.00         0.01         0.02     322742     530104
sda8              0.00         0.01         0.02     321038     530080
sda9              0.00         0.01         0.02     308854     532080
sda10             5.05        28.99       214.54  747089393 5528188002
sdb               1.33        46.39       588.21 1195318411 15156936736
sdb1              1.33        46.39       588.21 1195317483 15156936736

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00          0          0
sda1              0.00         0.00         0.00          0          0
sda2              0.00         0.00         0.00          0          0
sda3              0.00         0.00         0.00          0          0
sda4              0.00         0.00         0.00          0          0
sda5              0.00         0.00         0.00          0          0
sda6              0.00         0.00         0.00          0          0
sda7              0.00         0.00         0.00          0          0
sda8              0.00         0.00         0.00          0          0
sda9              0.00         0.00         0.00          0          0
sda10             0.00         0.00         0.00          0          0
sdb               0.00         0.00         0.00          0          0
sdb1              0.00         0.00         0.00          0          0

Blk_read/s 表示每秒读取的数据块数
Blk_wrtn/s 表示每秒写的数据块数
Blk_read 表示读取的所有块数
Blk_wrtn 表示写入的所有块数

需要说明的,第一次输出的是系统自启动开始到统计时的所有传输信息,第二次输出的数据才代表在监测的时间段内系统的传输值。
可以通过Blk_read/s Blk_wrtn/s的数值表现做一下简要分析,比如Blk_read/s 长期居高不下,说明磁盘的读操作频繁,可以考虑将读取的数据放到内存中进行操作;
如果Blk_wrtn/s长期居高不下,说明磁盘写操作频繁,可以考虑优化磁盘(提升转速,使用raid等),或者优化程序(简化写的次数,优化写的信息的格式化等)。

[@example.com ~]# iostat -x /dev/sda2 2 3
Linux 2.6.18-128.el5 (example.com)     2016年09月19日

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.94    0.00    1.78    0.32    0.00   95.96

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda2              0.01     1.38  0.08  0.59     1.23    15.77    25.23     0.04   63.08  11.63   0.78

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

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

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

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

iostat -x 跟sar -u 和 -d 的内容基本一致
主要说一下:
rrqm/s 表示每秒进行合并的读操作数量
wrqm/s 表示每秒进行合并的写操作数量
r/s 每秒完成度i/o设备的次数
w/s 每秒完成写i/o设备的次数
rsec/s 每秒读取的扇区数
wsec/s 每秒写入的扇区数


free

[root@NJ-37-212 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         31994      27240       4753          0        441      17816
-/+ buffers/cache:       8983      23010
Swap:        16499          0      16499

大概解释一下:
total 系统识别的内存总数
used 系统当前已经使用的内存数
free 系统空闲的内存数
shared 多个进程共享的内存总额
buffers Buffer Cache和cached Page Cache 磁盘缓存的大小
-buffers/cache 的内存数:used - buffers - cached
+buffers/cache 的内存数:free + buffers + cached

这里需要说明,可用的memory=free memory+buffers+cached

free -s ,使用 -s参数,可以实现以指定时间间隔对内存进行不间断监控

[root@NJ-37-212 ~]# free -m -s 5
             total       used       free     shared    buffers     cached
Mem:         31994      27254       4739          0        441      17829
-/+ buffers/cache:       8984      23009
Swap:        16499          0      16499

             total       used       free     shared    buffers     cached
Mem:         31994      27255       4738          0        441      17830
-/+ buffers/cache:       8984      23009
Swap:        16499          0      16499

uptime

uptime输出信息:系统现在的时间,系统自上次开机到现在的运行时间,系统目前有多少用户登录,系统分别在1、5、15min的平均负载情况

[@example.com ~]# uptime
 00:42:11 up 298 days,  6:31, 16 users,  load average: 0.27, 0.67, 1.14

这里需要注意load average,这里的负载信息跟sar -q的记录的当前系统的任务队列长度的值一样,表示在采样时间内等待被处理的任务数,
通常情况下,这三个数不能大于系统的cpu逻辑核数,如果长期大于cpu逻辑核数,则会较严重影响系统性能。

你可能感兴趣的:(Linux系统管理,Linux系统管理手记)