linux 一些监控命令的笔记整理

要使用下面的命令需安装sysstat 
yum -y install sysstat 

iostat    mpstat    pidstat   sadf      sar       webbench

 

常用监控命令
 
CPU vmstat,sar,top,ps,cat /proc/cpuinfo
内存 vmstat,sar,free,iostat
硬盘 vmstat,sar,df -h,iostat
网络 sar,ifconfig, cat /proc/net/dev   iptraf


webbench  这个是对网页进行压力测试的工具,下面的例子可以用webbench进行压力测试的同时进行 硬件负载测试 

使用方法
webbench -c 50 -t 300 http://10.1.1.15/index.php

即对http://10.1.1.15/index.php 这个网页进行每秒50并发量,持续300秒的压力测试,一般并发高于50.
这时候你的CPU 和内存都会有压力的了,随便使用下面的命令进行测试


一.负载监控

uptime

# uptime
 17:50:55 up 53 min,  2 users,  load average: 2.21, 2.41, 1.70

开机时间---登陆用户数---5-15分钟内负载
load average  5  10  15  分钟的负载状况 一般1为最佳,数字越大负载越大,如果网络很差,负载很好,说明就是网络问题了。

 

二.iostat

# iostat -x 2 10     --- 每两秒监控一次,连续10次

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.10    0.00   24.80   18.29    0.00   50.81

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00  2792.45    0.00   40.62     0.00 11332.29   557.90     0.48   11.71   0.80   3.26
hdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

 

主要用来监控CPU占用情况和磁盘的读写情况
%user   用户占用CPU情况
%sys    系统占用CPU情况
%idle 空闲

下面
rrqm/s:    每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s:    每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s:       每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s:       每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s:    每秒读扇区数。即 delta(rsect)/s
wsec/s:    每秒写扇区数。即 delta(wsect)/s
rkB/s:     每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:     每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:     平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm:     平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:     一秒中有百分之多少的时间用于 I/O 操作,即 delta(use)/s/1000 (因为use的单位为毫秒)


主要参数:

1.如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

2.如果 idle 小于 70% IO压力就较大了,一般读取速度有较多的wait。

3.同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)


三.vmstat

# vmstat 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    100   3744   3128 119768    0    0    27    22  743  226  4  5 90  0  0
 1  0    100   3588   3124 119820    0    0     0     0 1210  976  0  4 96  0  0
 0  0    100   3904   2432 119848    0    0     0 10324 2197 1852  6 30 64  0  0
 2  0    100   3808   2492 120184    0    0     0 13012 1446  951  3 16 67 14  0
 0  0    100   3648   2452 119928    0    0     0   398 2300 1852  6 29 62  3  0


PROC
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。


1 观察磁盘活动情况

磁盘活动情况主要从以下几个指标了解:
bi:表示从磁盘每秒读取的块数(blocks/s)。数字越大,表示读磁盘的活动越多。
bo:表示每秒写到磁盘的块数(blocks/s)。数字越大,表示写磁盘的活动越多。
wa:cpu等待磁盘I/O(未决的磁盘IO)的时间比例。数字越大,表示文件系统活动阻碍cpu的情况越严重,因为cpu在等待慢速的磁盘系统提供数据。wa为0是最理想的。如果wa经常大于10,可能文件系统

就需要进行性能调整了。
2 观察cpu活动情况

vmstat比top更能反映出cpu的使用情况:
us:用户程序使用cpu的时间比例。这个数字越大,表示用户进程越繁忙。
sy:系统调用使用cpu的时间比例。注意,NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话,就需要注意是否某个内核进程,比如NFS任务比较繁重。如果

us和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面,以免互相影响。
id:cpu空闲的时间比例。
wa:cpu等待未决的磁盘IO的时间比例。

内存
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。

 


目前说来,对于服务器监控有用处的度量主要有:

r(运行队列)
pi(页导入)
us(用户CPU)
sy(系统CPU)
id(空闲)
 
通过VMSTAT识别CPU瓶颈

r(运行队列)展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了。
获得CPU个数的命令(LINUX环境):
cat /proc/cpuinfo|grep processor|wc –l
当r值超过了CPU个数,就会出现CPU瓶颈,解决 办法大体几种:
1.   最简单的就是增加CPU个数
2.   通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进尔平衡系统任务
3.  调整已有任务的优先级 

通过VMSTAT识别CPU满负荷

首先需要声明一点的是,vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU 满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙

,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。
 
通过VMSTAT识别RAM瓶颈

数据库 服务器都只有有限的RAM,出现内存争用现象是Oracle 的常见问题。
首先察看RAM的数量,命令如下(LINUX环境):
[root@brucelau root]#free
           total         used         free        shared       buffers     cached
Mem:       1027348     873312     154036     185736     187496     293964
-/+ buffers/cache:       391852      635496
Swap:      2096440          0      2096440
 
当然可以使用top等其他命令来显示RAM。

当内存的需求大于RAM的数量,服务器启动了虚拟内存机制,通过虚拟内存,可以将RAM段移到SWAP DISK的特殊磁盘段上,这样会出现虚拟内存的页导出和页导入现象,页导出并不能说明RAM瓶颈,虚拟内

存系统经常会对内存段进行页导出,但页导入操作就 表明了服务器需要更多的内存了,页导入需要从SWAP DISK上将内存段复制回RAM,导致服务器速度变慢。
 
解决的办法有几种:
1.       最简单的,加大RAM
2.       改小SGA,使得对RAM需求减少
3.       减少RAM的需求(如:减少PGA)




四。sar

 

 

sar 常用参数

-b:报告I/O使用情况以及传输速率。(只适用于2.5及之前的内核,所以新内核有可能不支持这个选项)

-B:报告“页”使用情况

-c:报告进程创建情况

-d:报告每一个块设备的使用情况(当你使用时,你会发现在DEV列有类似dev1-7格式的字符串,其中1代表设备的主序号,
    n代表设备的从序号,而且rd_sec/s列和wr_sec/s列的单位都是512bytes,也就是512B,也就是0.5KB)

-I:汇报中断情况

-n:汇报网络情况

-P:设定CPU

-q:汇报队列长度和负载信息

-r:汇报内存和交换区使用情况

-R:汇报内存情况

-u:汇报CPU使用情况

-v:汇报i节点、文件和其他内核表信息

-w:汇报系统上下文切换情况

-x:可以针对某个特定PID给出统计信息,可以直接指定进程ID号;也可以指定为SELF,这样就是检测sar进程本身;如果设定为ALL,则表示汇报所有系统进程信息。

-X:汇报特定PID的子进程的信息

-y:设定TTY设备的信息。


监控CPU
# sar -u -o aaa 3 5
Linux 2.6.18-164.el5 (cacti.dog.com)    03/09/2011      _i686_  (2 CPU)

12:02:49 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
12:02:52 AM     all      2.56      0.00     13.46     10.58      0.00     73.40
12:02:55 AM     all      3.69      0.00     19.08     10.15      0.00     67.08
12:02:58 AM     all      5.57      0.00     24.63      7.92      0.00     61.88
12:03:01 AM     all      4.11      0.00     12.32     10.26      0.00     73.31
12:03:04 AM     all      0.00      0.00      0.32      0.00      0.00     99.68
Average:        all      3.24      0.00     14.13      7.83      0.00     74.80


采样CPU 每3秒采样一次,连续5秒
-o 表示将结果输出到文件aaa   直接打不开,需要sar -u -f aaa

%usr:CPU处在用户模式下的时间百分比。

%sys:CPU处在系统模式下的时间百分比。

%wio:CPU等待输入输出完成时间的百分比。

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

在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

sar -P ALL 1 1    对多核CPU 每个核监控

sar 1 10 > data.txt

//每隔1秒,写入10次,把CPU使用数据保存到data.txt文件中。

sar 1 0 -e 15:00:00 > data.txt

//每隔1秒记录CPU的使用情况,直到15点,数据将保存到data.txt文件中。(-e 参数表示结束时间,注意时间格式:必须为hh:mm:ss格式)

sar 1 0 -r -e 15:00:00 > data.txt

//每隔1秒记录内存使用情况,直到15点,数据将保存到data.txt文件中。

sar 1 0 -n DEV -e 15:00:00 > data.txt

//每隔1秒记录网络使用情况,直到15点,数据将保存到data.txt文件中。

 

监控硬盘

# sar -d 3 5
Linux 2.6.18-164.el5 (cacti.dog.com)    03/09/2011      _i686_  (2 CPU)

12:19:36 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
12:19:39 AM    dev8-0     15.00      0.00   8258.67    550.58      0.10      6.84      1.00      1.50
12:19:39 AM   dev22-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

rsec/s:    每秒读扇区数。即 delta(rsect)/s
wsec/s:    每秒写扇区数。即 delta(wsect)/s

avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:     平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm:     平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:     一秒中有百分之多少的时间用于 I/O 操作,即 delta(use)/s/1000 (因为use的单位为毫秒)


主要参数:

1.如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

2.如果 idle 小于 70% IO压力就较大了,一般读取速度有较多的wait。

期功能和IOSTAT差不多


监控缓冲区

# sar -b 3 5
Linux 2.6.18-164.el5 (cacti.dog.com)    03/09/2011      _i686_  (2 CPU)

12:15:32 AM       tps      rtps      wtps   bread/s   bwrtn/s
12:15:35 AM     11.00      7.33      3.67    144.00    154.67
12:15:38 AM      6.64      6.64      0.00    119.60      0.00
12:15:41 AM     16.00      0.00     16.00      0.00   8200.00
12:15:44 AM     41.20      0.00     41.20      0.00  18160.80
12:15:47 AM     24.67      0.00     24.67      0.00  16336.00
Average:        19.91      2.80     17.11     52.73   8570.97

显示内容包括:

tps 每秒传输数(或者每秒IO数)
rd_sec/s 每秒512字节读取数
wr_sec/s 每秒512字节写入数

bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数
bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。




sar命令使用-n选项可以汇报网络相关信息,可用的参数包括:DEV、EDEV、SOCK和FULL。

如果你使用DEV关键字,那么sar将汇报和网络设备相关的信息,如lo,eth0或eth1等,例如:

$ sar -n DEV 1 2
Linux 2.6.9      10/17/2009

12:10:49 AM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
12:10:50 AM      eth0     63.64      0.00   4072.73      0.00      0.00      0.00      0.00
12:10:50 AM      eth1     30.30     13.13   2907.07   1234.34      0.00      0.00      0.00
12:10:50 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

IFACE:就是网络设备的名称;

rxpck/s:每秒钟接收到的包数目

txpck/s:每秒钟发送出去的包数目

rxbyt/s:每秒钟接收到的字节数

txbyt/s:每秒钟发送出去的字节数

rxcmp/s:每秒钟接收到的压缩包数目

txcmp/s:每秒钟发送出去的压缩包数目

txmcst/s:每秒钟接收到的多播包的包数目

如果你使用EDEV关键字,那么会针对网络设备汇报其失败情况,例如:

$ sar -n EDEV 1 3
Linux 2.6.9     10/17/2009

12:15:06 AM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
12:15:07 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:15:07 AM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
12:15:07 AM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

rxerr/s:每秒钟接收到的损坏的包的数目

txerr/s:当发送包时,每秒钟发生的错误数

coll/s:当发送包时,每秒钟发生的冲撞(collisions)数(这个是在半双工模式下才有)

rxdrop/s:由于缓冲区满,网络设备接收端,每秒钟丢掉的网络包的数目

txdrop/s:由于缓冲区满,网络设备发送端,每秒钟丢掉的网络包的数目

txcarr/s:当发送数据包时,每秒钟载波错误发生的次数

rxfram/s:在接收数据包时,每秒钟发生的帧对齐错误的次数

rxfifo/s:在接收数据包时,每秒钟缓冲区溢出错误发生的次数

txfifo/s:在发送数据包时,每秒钟缓冲区溢出错误发生的次数

如果你使用SOCK关键字,则会针对socket连接进行汇报,例如:

$ sar -n SOCK 1 3
Linux 2.6.9       10/17/2009

12:27:29 AM    totsck    tcpsck    udpsck    rawsck   ip-frag
12:27:30 AM        90        41         4         0         0
12:27:31 AM        90        41         4         0         0
12:27:32 AM        90        41         4         0         0
Average:           90        41         4         0         0

totsck:被使用的socket的总数目

tcpsck:当前正在被使用于TCP的socket数目

udpsck:当前正在被使用于UDP的socket数目

rawsck:当前正在被使用于RAW的socket数目

ip-frag:当前的IP分片的数目

如果你使用FULL关键字,相当于上述DEV、EDEV和SOCK三者的综合

 


 

你可能感兴趣的:(sar,vmstat,iostat,uptime,sysstat)