下面的三张图片[2]分别总结了 Linux 各个子系统以及监控、测试、优化这些子系统所用到的工具[Brendan]。
监控
测试
优化
1、vmstat
vmstat是Visual Mermory Statistics(虚拟内存统计)的缩写,很多Linux发行版都默认安装了此工具。利用vmstat命令可以对操作系统的内存信息、进程状态、CPU活动等进行监视,不足之处是无法对某个进程进行深入分析。
vmstat语法:
vmstat [-V] [-n] [delay [count]]
各选项及参数含义:
-V:打印出版本信息,可选
-n:在周期性循环输出时,输出的头部信息仅显示一次
delay:两次输出中间的间隔时间
count:按照“delay”指定的时间间隔统计的次数,默认1
其中,
procs
r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。
b列表示等待资源的进程数,比如正在等待I/O或者内存交换等。
memory
swpd列表示切换到内存交换区大小(以KB为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况一般不用担心,不会影响系统性能。
free列表示当前空闲的物理内存数量(以KB为单位)。
buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。
cache列表示page cached的内存数量,一般作为文件系统进行缓冲,频繁访问的文件都会被缓存。如果cache值较大,说明缓存的文件数较多,如果此时io中的bi比较小,说明文件系统效率比较好。
swap
si列表示由磁盘调入内存,也就是由内存进入内存交换空间的内存大小。
so列表示由内存调入磁盘,也就是由内存交换区进入内存的内存大小。
一般情况下,si、so的值为0,如果si、so的值长期不为0,则表示系统内存不足,需要增加系统内存。
io项表示磁盘读写情况
bi列表示从块设备读入数据的总和(即读磁盘)(kb/s)。
bo列表示写到块设备的数据总和(即写磁盘)(kb/s)。
这里设置的bi+bo参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘I/O有问题,应该考虑提高磁盘的读写性能。
system显示采集间隔内发生的中断数
in列表示在某一时间间隔内观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数。
上面这两个值越大,由内核消耗的CPU时间越多。
cpu项显示了CPU的使用状态,此项是关注的重点。
us列显示了用户进程消耗的CPU时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期大于50%,就需要考虑优化程序或算法。
sy列显示了内核进程消耗的CPU时间百分比。sy的值较高时,说明内核消耗的CPU资源很多。
根据经验,us+sy的参考值为80%,如果us+sy大于80%,说明可能存在CPU资源不足。
id列显示了CPU处在空闲状态的时间百分比。
wa列显示了IO等待所占用的CPU时间百分比。wa值越高,说明I/O等待越严重。根据经验,wa的参考值为20%,如果wa超过20%,说明I/O等待严重。引起I/O等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈(主要是块操作)造成的。
综上所述,对CPU的评估中,需要重点注意procs项中r列的值和CPU项中us、sy和id列的值。
2、sar
sar命令很强大,是分析系统性能的重要工具之一。通过sar指令,可以全面获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据。
sar命令语法:
sar [options] [-o filename] [interval [count] ]
各个选项和参数:
options,命令行选项,常用选项:
-A:系统所有资源设备(CPU、内存、磁盘)的运行状况。
-u:系统所有CPU在采样时间内的负载状态。
-P:当前系统中指定CPU的使用情况。
-d:系统所有硬盘设备在采样时间内的使用情况。
-r:系统内存在采样时间内的使用情况。
-b:缓冲区在采样时间内的使用情况。
-v:进程、文件、节点和锁表状态。
-n:网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示前三个参数的所有信息。它们可以单独使用或者一起使用。
-q:运行队列的大小,它与系统当时的平均负载相同。
-R:进程在采样时间内的活动情况。
-y:终端设备在采样时间内的活动情况。
-w:系统交换活动在采样时间内的状态。
-o filename:将命令结果以二进制格式存放在文件中,filename是文件名。
interval:采样间隔时间,是必须有的参数。
count:采样次数,可选项,默认1。
其中,
%user列显示了用户进程消耗的CPU时间百分比。
%nice列显示了运行正常进程所消耗的CPU时间百分比。
%system列显示了系统进程消耗的CPU时间百分比。
%iowait列显示了I/O等待所占用的CPU时间百分比。
%steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作。
%idle列显示了CPU处在空闲状态的时间百分比。
这个输出是对系统整体CPU使用状况的统计,每项的输出都非常直观,并且最后一行Average是个汇总行,是上面统计信息的平均值。
需要注意的是,第一行的统计信息中包含了sar本身的统计消耗,所以%user列的值会偏高一点,不过,这不会对统计结果产生太大的影响。
在一个多CPU的系统中,如果程序使用了单线程,会出现那么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢。单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致了整体CPU使用率不高而应用缓慢现象的发生。
针对这个问题,可以分开查询系统每个CPU,统计每个CPU的使用情况-------sar -P 0 3 5
3、iostat
iostat是I/O statistics(输入/输出统计)的缩写,主要的功能是对系统的磁盘I/O操作进行监视。它的输出主要显示磁盘读写操作的统计信息,同时给出CPU的使用情况。同vmstat一样,iostat也不能对某个进程进行深入分析,仅对系统的整体情况进行分析。(Sysstat-----iostat/sar/mpstat)
iostat语法:
iostat [ -c | -d ] [-k] [-t] -x [device ] ] [interval [count] ]
各选项及参数:
-c:CPU的使用情况。
-d:键盘的使用情况。
-k:每秒以KB为单位显示数据。
-t:打印出统计信息开始执行的时间。
-x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备。
interval:指定两次统计间隔时间。
count:按照“interval”指定的时间间隔统计次数。
其中,
Blk_read/s:每秒读取的数据块数。
Blk_wrtn/s:每秒写入的数据酷块数。
Blk_read:读取的所有块数。
Blk_wrtn:写入的所有块数。
其中,
rrqm/s:每秒进行合并的读操作数目。
wrqm/s:每秒进行合并的写操作数目。
r/s:每秒完成读I/O设备的次数。
w/s:每秒完成写I/O设备的次数。
rsec/s:每秒读取的扇区数。
wsec/s:每秒写入的扇区数。
4、free
free是监控Linux内存使用情况最常用的指令
free -m表示查看以M为单位的内存使用情况,在这个输出中,重点关注的应该是free列与cached列的输出值。
一般有这样一个经验公式:当应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能;当应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存;当20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。
free命令还可以适时监控内存的使用状况,使用-s参数可以在指定的时间段内不间断地监控内存的使用情况。
5、uptime
uptime主要用来统计系统当前的运行状况。输出的信息依次为:系统现在的时间,系统从上次开机到现在运行了多长时间,系统目前有多少登陆用户,系统在1分钟内、5分钟内、15分钟内的平均负载。load average的三个输出值如果长期大于系统CPU个数,则表示系统负载较高,可能影响性能。
6、netstat
netstat命令用于显示本机网络连接、运行端口、路由表等信息。语法:
netstat [选项]
选项说明:
-a:显示本机的所有连接和监听端口
-n:以网络IP地址的形式显示当前建立的有效连接和端口
-r:显示路由表信息
-s:显示按协议的统计信息。默认将显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6的统计信息
-v:显示当前的有效连接,与”-n“选项类似
-t:显示所有的TCP协议连接情况
-u:显示所有的UDP协议连接情况
-c<描述>:后面的秒数表示每隔几秒就刷新显示一次
-i:显示自动配置接口的状态
-l:仅显示连接状态为”LISTEN“的服务的网络状态
-p:显示连接对应的PID与程序名
Iface:网络设备的接口名称
MTU:最大传输单元,单位为字节
RX-OK/TX-OK:已经准确无误地接收/发送了多少数据包
RX-ERR/TX-ERR:接收/发送数据包时产生了多少错误
RX-DRP/TX-DRP:接收/发送数据包时丢失了多少数据包
RX-OVR/TX-OVR:由于误差而遗失了多少数据包
Flg:接口标记,其中:
L:该接口是个回环设备
B :设置了广播地址
M:接收所有数据
R:接口正在运行
U:接口处于活动状态
O:该接口上禁用arp
P:一个点到点的连接
在正常情况下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降。
7、top
提供实时对系统处理器状态的监控,能够实时显示系统中各个进程的资源占用状况。该命令可以按照CPU的使用、内存的使用和执行时间对系统任务进程进行排序显示。同时top命令还可以通过交互式命令进行设定显示。
top命令语法:
top [选项]
常用选项:
-d:指定每两次屏幕信息刷新之间的时间间隔
-i:不显示闲置或僵死的进程信息
-c:显示进程的整个命令路径,而不是只显示命令名称
-s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险
-b:分屏显示输出信息,结合-n选项可以将屏幕信息输出到文档
-n:top输出信息更新的次数,完成后将退出top命令
交互式命令:
h或?:显示帮助信息,给出交互式命令的一些总结或说明总结
k:终止一个进程,系统将提示用户输入一个需要终止进程的PID
i:忽略闲置进程和僵死进程,这是一个开关式命令
s:改变top输出信息两次刷新之间的时间,系统将提示输入新的时间,单位是秒,如果是小数,就换算成毫秒。如果输入0,系统输出将不断被刷新,默认刷新时间是5秒。 需要注意的是,如果设置的时间太小,可能会引起系统不断地刷新,无法看清输出的显示情况,而且系统负载也会加大
o或者O:改变top输出信息中显示项目的顺序。按小写的a~z键可以将相应的列向右移动,而按大写的A~Z键可以将相应的列向左移动,最后按回车键确定
f或者F:从当前显示列表中添加或删除项目。按f键之后会显示列的列表,按a~z之间的任意键即可显示或隐藏对应的列,最后按回车键确定
m:切换显示内存信息
t:切换显示进程和CPU状态信息
r:重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则使该进程拥有更高的优先权。默认值是10
l:切换显示平均负载和启动时间信息
q:退出top显示
c:切换显示完整命令行和命令名称信息
M:根据驻留内存大小进行排序输出
P:根据CPU使用百分比大小进行排序输出
T:根据时间/累计时间进行排序输出
S:切换到累计模式
W:将当前top设置写入~/.toprc文件中
top的输出分为两部分:统计信息区和进程信息区,即前5行显示为统计信息区,后面几行的为进程信息区。
(1)统计信息区
第一行为任务队列信息,含义如下:
:当前系统时间
:系统已经启动了时间(天小时分钟)
:当前登陆系统的用户数
:系统平均负载,3个值分别表示1分钟、5分钟、15分钟前到现在的系统平均负载值
第二、三行为进程和CPU信息,含义如下:
:进程的总数
:正在运行的进程数
:处于休眠的进程数
:停止的进程数
:僵死的进程数
:用户进程占用CPU的百分比
:系统进程占用CPU的百分比
:用户进程空间内改变过优先级的进程占用CPU的百分比
:空闲CPU占用的百分比
:等待输入输出的进程占用CPU的百分比
最后两行输出的是内存信息,含义如下:
:系统的物理内存大小
:已使用的物理内存大小
:目前空余内存大小
:用作内核缓冲区的内存大小
:交换分区的内存大小
:已经使用的交换分区大小
:空闲的交换分区大小
:高速缓存的大小
(2)进程信息区
PID:进程的id
USER:进程所有者的用户名
PR:进程优先级
NI:nice值,负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位为KB。VIRT=SWAP+RES
RES:进程使用的、未被换出的物理内存大小,单位为KB,RES=CODE+DATA
SHR:共享内存大小,单位为KB
S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程占用的物理内存百分比
TIME+:进程使用的CPU时间总计,单位为1/100秒
COMMAND:正在运行进程的命令名或命令路径
工具 | 简单介绍 |
top | 查看进程活动状态以及一些系统状况 |
vmstat | 查看系统状态、硬件和系统信息等 |
iostat | 查看CPU 负载,硬盘状况 |
sar | 综合工具,查看系统状况 |
mpstat | 查看多处理器状况 |
netstat | 查看网络状况 |
iptraf | 实时网络状况监测 |
tcpdump | 抓取网络数据包,详细分析 |
tcptrace | 数据包分析工具 |
netperf | 网络带宽工具 |
dstat | 综合工具,综合了 vmstat, iostat, ifstat, netstat 等多个信息 |
参考文献:
1、高性能Linux服务器构建实战----运维监控、性能调优与集群应用(高俊峰 著)
[2]、http://www.brendangregg.com/linuxperf.html