linux下查看系统资源(iostat,top,vmstat,mpstat等)
为什么我们要查看系统资源呢?
维护服务器的时候,要经常查看系统资源的,可以了解一下服务器的运行情况。系统优化时,比如使用memcache时,我要决定分配多少内存给他合适呢,mysql的innodb的参数优化也要考虑到内存使用率,i/o的频繁程度啊,如果使用apache的话,要启动多少个httpd比较合适呢,如果数据库的数据太大,我要看看是不是增加磁盘呢等等,这个时候,我们要知道,有多少资源可用,才能更好的优化我们的系统。
1,top命令查看cpu,mem的使用情况
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 21093 root 15 0 12700 736 524 S 2 0.0 80:01.36 cmahostd 1 root 15 0 10324 84 52 S 0 0.0 1:10.26 init 2 root RT -5 0 0 0 S 0 0.0 0:27.31 migration/0
%cpu 进程所占cpu时间的百分比
%mem 进程所占内存的百分比
2,top 后 在shift + p 所占进程的排序显示
3,top 后 在shift + m 所占内存的排序显示
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 11981 root 34 19 276m 43m 1452 S 0 1.1 64:22.57 yum-updatesd 2601 apacheus 15 0 413m 37m 5376 S 0 1.0 0:00.76 httpd 18833 apacheus 15 0 415m 36m 5908 S 0 0.9 0:01.49 httpd 18832 apacheus 15 0 415m 35m 5804 S 0 0.9 0:02.19 httpd 22881 apacheus 15 0 415m 35m 5924 S 0 0.9 0:01.62 httpd
4,vmstat 2 每隔2秒查看一下内存,交换分区,i/o,cpu的使用情况
[root@tank ~]# vmstat 2 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 182164 187684 708508 1997704 0 0 1 5 0 0 0 0 100 0 0 1 0 182164 187396 708508 1997708 0 0 0 36 1020 2203 0 0 99 0 0 0 0 182164 187708 708508 1997712 0 0 0 114 1056 2367 1 0 99 0 0
memory下的参数说明:
swpd: 已用的交换空间数量
free: 空闲内存数量
buff: 缓冲使用的内存数量
cache: 文件系统缓存使用的内存数量
swap交换分区下的参数说明:
si: 从磁盘转换到内存的数量
so: 从内存转换到磁盘的数量
i/o磁盘i/o下的参数说明:
bi: 从块设备读的数量
bo: 写块设备的数量
cpu下的一些参数说明:
us: 用户方式下所占CPU工作时间的百分比
sy: 内核进程所占cpu工作时间的百分比
id: cpu处在空闲状态下的时间百分比
wa: 等待I/O所占用CPU工作时间的百分比
上面个人觉得比较重要的参数说明
5,df 查看磁盘的使用情况
[root@tank ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 39674192 7252020 30374288 20% / /dev/sda3 49594196 8586164 38448076 19% /usr /dev/sda4 59515556 6405700 50037828 12% /var
1K-blocks 总的磁盘大小
used 表示已使用了多少
available 表示还有多少空间可用
use% 磁盘的使用率
6,mpstat和sar查看cpu的运行情况,这二个差不多
[root@tank ~]# mpstat 11:38:39 AM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 11:38:39 AM all 0.11 0.01 0.05 0.13 0.00 0.01 0.00 99.68 84.51
%user 用户所占的CPU时间百分比
%nice nice值为负进程的CPU时间百分比
%sys 系统内核所占cpu时间的百分比
%iowait i/o等待所占cpu时间的百分比
%idle cpu闲置时间的百分比
intr/s 每秒cpu的中断次数
7,free -m来查看内存,交换分区使用情况,如果不加-m的话,最小单位是KB
[root@tank ~]# free -m total used free shared buffers cached Mem: 3823 3647 175 0 703 1945 -/+ buffers/cache: 998 2825 Swap: 24003 177 23825
total 表时总量是多少
used 已经使用了多少
free 还有多少空闲
shared 共享是多少
buffers 缓冲是多少
cached 缓存了多少
8,iostat查看磁盘i/o情况
[root@krlcgcms01 ~]# iostat -x 2 linux 2.6.18-92.1.10.el5 (krlcgcms01) 12/10/2010 avg-cpu: %user %nice %system %iowait %steal %idle 0.11 0.01 0.06 0.13 0.00 99.68 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util cciss/c0d0 0.21 7.78 0.44 3.00 12.13 86.31 28.63 0.03 7.68 3.39 1.17
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 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)