Linux 服务器监控

IO监控

iostat命令

yum install sysstat  

主要用于监控系统设备的IO负载情况

iostat --help  
用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
Options are:  
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]

iostat  
Linux 2.6.32-573.18.1.el6.x86_64 (xxxxxx)         2016年03月22日  _x86_64_        (24 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           0.19    0.00    0.11    0.12    0.00   99.58

%user:用户CPU百分比

%nice: nice操作所使用的CPU的百分比

%system:操作系统所使用的CPU百分比

%iowait:CPU等等IO操作所占用的CPU百分比,当磁盘IO比较大的时候该值会增加。

%steal:分配给虚拟机占用的CPU百分比

%idle:CPU空闲时间的百分比

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
sda              11.23         4.70       381.77   13950888 1133813684  

tps: 每秒钟发送到的I/O请求数(可以理解成每秒磁盘IO处理的请求,这样可能更好理解)Blk_read /s: 每秒读取的block数
Blk_wrtn/s: 每秒写入的block数
Blk_read: 读入的block总数
Blk_wrtn: 写入的block总数

-c参数:

分成CPU的状态,也就是上面的CPU部分

-d参数

分析磁盘设备状态,也就是上面的Device部分。

-n参数

分析文件系统的状态

Filesystem:              rBlk_nor/s   wBlk_nor/s   rBlk_dir/s   wBlk_dir/s   rBlk_svr/s   wBlk_svr/s     ops/s    rops/s    wops/s  

[-N或者-h]参数

和直接运行iostat的区别主要是device部分,这里显示的是设备每秒的读写、读写字节情况,默认是kB

avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           0.19    0.00    0.11    0.12    0.00   99.58

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
sda              11.23         4.70       381.78   13952440 1133976060

kB_read/s:每秒从设备读的KB数

kB_wrtn/s:每秒写入设备的KB数

kB_read:每秒从设备读的KB字节

kB_wrtn:每秒写入设备的KB字节

[ -k | -m ]参数

是单位,分别是KB和MB,默认单位是KB,用来做磁盘分析的时候使用

例如iostat -d -m(以MB作为单位显示)

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn  
sda              11.23         0.00         0.19       6812     553714  

-t参数

显示的时候打印出时间

iostat -t  
Linux 2.6.32-573.18.1.el6.x86_64 (xxxx)         2016年03月22日  _x86_64_        (24 CPU)

2016年03月22日 10时15分04秒  
avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           0.19    0.00    0.11    0.12    0.00   99.58

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
sda              11.23         4.70       381.79   13952784 1134032076

[-v或-Z]参数

暂时没发现什么特别的功能

-x参数

最详细的显示CPU和设备信息

iostat -x  
Linux 2.6.32-573.18.1.el6.x86_64 (xxx)         2016年03月22日  _x86_64_        (24 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           0.19    0.00    0.11    0.12    0.00   99.58

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util  
sda               0.05    23.91    0.23   11.00     4.70   381.79    34.42     0.68   60.15   4.00   4.49

其中CPU部分没有什么变化,这里主要来看device部分:

rrqm/s:将读入请求合并后,每秒发送到设备的读入请求数.
wrqm/s:将写入请求合并后,每秒发送到设备的写入请求数.
r/s:每秒发送到设备的读入请求数.
w/s:每秒发送到设备的写入请求数.
rsec/s:每秒从设备读入的扇区数.
wsec/s:每秒向设备写入的扇区数.
rkB/s:每秒从设备读入的数据量,单位为K.
wkB/s:每秒向设备写入的数据量,单位为K.
avgrq-sz:发送到设备的请求的平均大小,单位是扇区.
avgqu-sz:发送到设备的请求的平均队列长度.
await:I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒.
svctm:发送到设备的I/O请求的平均执行时间.单位是毫秒.
%uti:在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率. 当这个值接近100%时,表示设备带宽已经占满.

-P参数

分析指定的设备:例如sda,sdb

iostat -p sda  
Linux 2.6.32-573.18.1.el6.x86_64 (xxxx)         2016年03月22日  _x86_64_        (24 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle  
           0.19    0.00    0.11    0.12    0.00   99.58

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn  
sda              11.23         4.70       381.79   13952968 1134080292  
sda1              0.00         0.00         0.00       3976          0  
sda2              0.00         0.00         0.00       4660         44  
sda3             11.23         4.69       381.79   13942924 1134080248  

常见的用法:

显示设备和CPU状态,每秒打印一次,并显示时间

iostat -x -k -t 1

显示设备和CPU状态,每秒显示一次,显示10次,并显示时间

iostat -x -k -t 1 10

显示设备sda和CPU状态,每秒显示一次,显示10次,并显示时间

iostat -x -k -t -p sda 1 10

CPU监控

mpstat
mpstat命令主要用来分析CPU的性能,并且可以分析单个cpu的性能状态。

mpstat -P ALL  
Linux 2.6.32-573.18.1.el6.x86_64 (xxxx)         2016年03月22日  _x86_64_        (24 CPU)

10时17分53秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle  
10时17分53秒  all    0.19    0.00    0.09    0.12    0.00    0.01    0.00    0.00   99.58  
10时17分53秒    0    1.57    0.00    0.91    1.73    0.00    0.21    0.00    0.00   95.58  
.....
10时17分.53秒   23    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.98
进程监控

top命令
例:查看mysql用户进程

top -u mysql  
top - 10:19:59 up 34 days,  9:09,  1 user,  load average: 0.20, 0.14, 0.14  
Tasks: 505 total,   1 running, 504 sleeping,   0 stopped,   0 zombie  
Cpu(s):  0.3%us,  0.1%sy,  0.0%ni, 99.0%id,  0.5%wa,  0.0%hi,  0.0%si,  0.0%st  
Mem:  32810972k total, 32379048k used,   431924k free,   913556k buffers  
Swap: 16474108k total,    89592k used, 16384516k free, 17529708k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2876 mysql     20   0 18.3g 7.5g 135m S  1.7 24.1 652:31.70 mysqld

top这行信息可以参考下面的uptime的解释。

tasks:505个进程总数,1个正在运行的进程,504个睡眠的进程,0个停止的进程,0个僵尸进程

cpu:0.3%us(用户占用), 0.1%sy(系统占用), 0.0%ni, 99.0%id(空闲), 0.5%wa(等待输入输出的CPU时间百分比), 0.0%hi, 0.0%si, 0.0%st

Mem: 32810972k total(总内存), 32379048k used(已使用内存), 431924k free(未使用的内存), 913556k buffers(内核缓存)

Swap: 16474108k total(交换区总大小), 89592k used(已使用), 16384516k free(未使用), 17529708k cached(缓冲的交换区总量)

PID:进程ID

USER:用户

PR:优先级

NI:nice值。负值表示高优先级,正值表示低优先级

S:进程状态(R:运行,S:睡眠,T:停止,Z:僵尸进程,D:不可中断的睡眠状态)

%CPU:占用的CPU百分比

%MEM:占用的内存百分比

TIME+:累计占用的CPU时间

COMMAND:命令

这里有每个进程的文件:/etc/proc

系统负载

uptime命令

10:23:09 up 34 days,  9:13,  1 user,  load average: 0.18, 0.14, 0.14  
  • 当前时间 10:23:09
  • 系统已运行的时间 34天
  • 当前在线用户 1 user
  • 平均负载:0.18, 0.14, 0.14最近1分钟、5分钟、15分钟系统的负载

查看文件

cat /proc/loadavg  
0.23 0.14 0.13 1/597 26268  

除了前3个数字表示平均进程数量外,后面的1个分数,分母表示系统进程总数,分子表示正在运行的进程数;最后一个数字表示最近运行的进程ID

系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:

  • 它没有在等待I/O操作的结果
  • 它没有主动进入等待状态(也就是没有调用'wait')
  • 没有被停止(例如:等待终止)

一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重。当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢。

vmstat命令

该命令可以用来分析整个服务器的基本情况,包括内存、交换分区、IO、system、cpu

vmstat  
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  89552 429052 913580 17536844    0    0     0     8    0    0  0  0 100  0  0