linux下关于程序性能和系统性能的工具、方法

观察性能/状态的方法:top free netstat /pro/目录下的信息

其中/pro/meminfo下的信息相当丰富

 

-------------------------------------------华丽的分割线----------------------------------------------------------

$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 4 329796 26040 4528 3379824 1 1 50 160 36 17 2 10 85 3 0

procs
r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。
b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。
cpu 表示cpu的使用状态
us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 列显示了cpu处在空闲状态的时间百分比
system 显示采集间隔内发生的中断数
in 列表示在某一时间间隔中观测到的每秒设备中断数。
cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory
swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap
si 由内存进入内存交换区数量。
so由内存交换区进入内存数量。
IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)。
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。

-------------------------------------------华丽的分割线----------------------------------------------------------

                                                  查看linux服务器硬盘IO读写负载

     最近一台linux服务器出现异常,系统反映很慢,相应的应用程序也无法反映,而且还出现死机的情况,经过几天的观察了解,发现服务器压力很大,主要的压力来自硬盘的IO访问已经达到100%

  为了方便各位和自己今后遇到此类问题能尽快解决,我这里将查看linux服务器硬盘IO访问负荷的方法同大家一起分享:

  首先 、用top命令查看

  top - 16:15:05 up 6 days,  6:25,  2 users,  load average: 1.45, 1.77, 2.14

  Tasks: 147 total,   1 running, 146 sleeping,   0 stopped,   0 zombie

  Cpu(s):  0.2% us,  0.2% sy,  0.0% ni, 86.9% id, 12.6% wa,  0.0% hi,  0.0% si

  Mem:   4037872k total,  4003648k used,    34224k free,     5512k buffers

  Swap:  7164948k total,   629192k used,  6535756k free,  3511184k cached

  查看12.6% wa

  IO等待所占用的CPU时间的百分比,高过30%时IO压力高

  其次、 用iostat -x 1 10

  如果 iostat 没有,要  yum install sysstat

  avg-cpu:  %user   %nice    %sys %iowait   %idle

  0.00       0.00     0.25    33.46    66.29

  Device:    rrqm/s  wrqm/s   r/s    w/s     rsec/s   wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util

  sda          0.00    0.00      0.00   0.00    0.00    0.00         0.00     0.00     0.00           0.00    0.00    0.00   0.00

  sdb          0.00   1122  17.00  9.00  192.00 9216.00    96.00  4608.00   123.79   137.23 1033.43  13.17 100.10

  sdc          0.00    0.00     0.00   0.00     0.00     0.00      0.00     0.00     0.00             0.00    0.00      0.00   0.00

  查看%util 100.10 %idle 66.29

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

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

  同时可以结合vmstat 查看查看b参数(等待资源的进程数)

  vmstat -1

  如果你想对硬盘做一个IO负荷的压力测试可以用如下命令

  time dd if=/dev/zero bs=1M count=2048 of=direct_2G

  此命令为在当前目录下新建一个2G的文件

  我们在新建文件夹的同时来测试IO的负荷情况

  再通过如下脚本查看高峰的进程io情况

  monitor_io_stats.sh

  #!/bin/sh

  /etc/init.d/syslog stop

  echo 1 > /proc/sys/vm/block_dump

  sleep 60

  dmesg | awk '/(READ|WRITE|dirtied)/ {process[$1]++} END {for (x in process) \

  print process[x],x}' |sort -nr |awk '{print $2 " " $1}' | \

  head -n 10

  echo 0 > /proc/sys/vm/block_dump

  /etc/init.d/syslog start

  或者用iodump.pl脚本

posted @ 2014-06-24 20:53  johnny_HITWH  阅读(226)  评论(0编辑  收藏  举报