要使用下面的命令需安装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三者的综合。