以下介绍常用的几个系统分析的命令以及常用方法:
vmstat
vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,很多Linux发行版本都默认安装了此命令工具。当然,不止对虚拟内存有统计,还可以利用vmstat命令可以对进程状态、CPU活动等进行监视,不足就是不能对某个进程跟踪分析。
vmstat 命令语法:
vmstat [-V] [-n] [delay [count]]-V,显示当前版本
-n,表示循环输出信息时,头部信息只出现一次。
delay,两次输出之间的时间间隔
count,表示按照“delay”指定的时间间隔统计的次数,默认为1
[root@example.com ~]# vmstat1 5
procs- -------------memory------------ ---swap-- -----io---- --system--- ------cpu-----
rbswpdfreebuffcachesisobiboincsus sy id wa st
1004852724 465532 19557332003330030 9700
0004853232 465532 1955734000017610946 11871 60 9400
1004852520 465532 19557824000011010 10857 61 9300
1004853360 465532 19557672000511211034 937991 9000
3004851908 465532 19558160000010934 937131 9600
下面解释一下:
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月18日21时38分24秒CPU%user%nice%system%iowait%steal%idle
21时38分25秒20.000.000.000.000.00100.00
21时38分26秒20.000.000.000.000.00100.00
21时38分27秒20.000.000.000.000.00100.00
21时38分28秒20.000.000.000.000.00100.00
21时38分29秒20.000.000.001.000.0099.00
Average:20.000.000.000.200.0099.80
%user:用户进程消耗的cpu时间比例。
%nice:列显示运行正常进程所消耗cpu的时间比例。
%system:显示系统进程消耗的cpu时间比例。
%iowait:列显示了io等待所消耗的cpu时间。
%steal:表示在内存相对紧张的情况下,pagein强制对不同页面进行的steal处理。
%idle:列显示了cpu在空闲状态下的时间百分比。
最后一行的average是对上面内容求的平均值。
如上,可以指定某一个cpu,对其负载监控,这样可以结果有的程序做成了单线程,这样虽然cpu整体消耗不高,但是单线程就不行了
查看机器历史性能信息
sar -b -s 10:00:00 -e16: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 -e10:50:00 -f /var/log/sa/sa10
Linux 2.6.18-128.el5 (example.com)2016年09月10日10时00分01秒tpsrtpswtpsbread/sbwrtn/s
10时10分01秒13.830.1213.711.631344.93
10时20分01秒272.92250.3422.582011.541650.26
10时30分01秒11.250.0211.230.131118.80
10时40分01秒11.870.0111.860.111143.23
Average:77.5062.6514.84503.591314.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 -d1 2
Linux 2.6.18-128.el5 (example.com)2016年09月18日Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtn
sda8.6534.40569.09886282530 14664213986
sda10.000.000.0059912637
sda20.671.2315.7731779879406401849
sda31.532.6460.9867940779 1571254746
sda40.000.000.0060
sda51.401.48277.7238223426 7156219000
sda60.000.010.02289718555488
sda70.000.010.02322742530104
sda80.000.010.02321038530080
sda90.000.010.02308854532080
sda105.0528.99214.54747089393 5528188002
sdb1.3346.39588.21 1195318411 15156936736
sdb11.3346.39588.21 1195317483 15156936736Device:tpsBlk_read/sBlk_wrtn/sBlk_readBlk_wrtn
sda0.000.000.0000
sda10.000.000.0000
sda20.000.000.0000
sda30.000.000.0000
sda40.000.000.0000
sda50.000.000.0000
sda60.000.000.0000
sda70.000.000.0000
sda80.000.000.0000
sda90.000.000.0000
sda100.000.000.0000
sdb0.000.000.0000
sdb10.000.000.0000
【Linux系统管理|Linux-系统管理-常用命令(上)】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.940.001.780.320.0095.96Device:rrqm/swrqm/sr/sw/srsec/swsec/s avgrq-sz avgqu-szawaitsvctm%util
sda20.011.380.080.591.2315.7725.230.0463.0811.630.78avg-cpu:%user%nice %system %iowait%steal%idle
0.000.000.120.000.0099.88Device:rrqm/swrqm/sr/sw/srsec/swsec/s avgrq-sz avgqu-szawaitsvctm%util
sda20.000.000.000.000.000.000.000.000.000.000.00avg-cpu:%user%nice %system %iowait%steal%idle
0.000.000.060.000.0099.94Device:rrqm/swrqm/sr/sw/srsec/swsec/s avgrq-sz avgqu-szawaitsvctm%util
sda20.000.000.000.000.000.000.000.000.000.000.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
totalusedfreesharedbufferscached
Mem:31994272404753044117816
-/+ buffers/cache:898323010
Swap:16499016499
大概解释一下:
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
totalusedfreesharedbufferscached
Mem:31994272544739044117829
-/+ buffers/cache:898423009
Swap:16499016499totalusedfreesharedbufferscached
Mem:31994272554738044117830
-/+ buffers/cache:898423009
Swap:16499016499
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逻辑核数,则会较严重影响系统性能。