Linux服务器高I/O等待延迟问题查找


0. 首先是top查看一下系统状况

发现两个参数异常,一是平均负载高,一是cpu %wa一直在50%以上。

查了一下%wa参数的意义:

  1. wa -- iowait  
  2.  Amount of time the CPU has been waiting for I/O to complete. 

1. 查看磁盘读写数据

用iostat 查看磁盘状况

  1. $ iostat -x 2 5  
  2.  avg-cpu: %user %nice %system %iowait %steal %idle  
  3.   3.66 0.00 47.64 48.69 0.00 0.00  
  4.  
  5.  Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util  
  6.  sda 44.50 39.27 117.28 29.32 11220.94 13126.70 332.17 65.77 462.79 9.80 2274.71 7.60 111.41  
  7.  dm-0 0.00 0.00 83.25 9.95 10515.18 4295.29 317.84 57.01 648.54 16.73 5935.79 11.48 107.02  
  8.  dm-1 0.00 0.00 57.07 40.84 228.27 163.35 8.00 93.84 979.61 13.94 2329.08 10.93 107.02 

2.查看进程状态

进程状态表

  1. PROCESS STATE CODES  
  2.  D uninterruptible sleep (usually IO)  
  3.  R running or runnable (on run queue)  
  4.  S interruptible sleep (waiting for an event to complete)  
  5.  T stopped, either by a job control signal or because it is being traced.  
  6.  W paging (not valid since the 2.6.xx kernel)  
  7.  X dead (should never be seen)  
  8.  Z defunct ("zombie") process, terminated but not reaped by its parent. 

查看到进程中状态Ddisk sleep)的进程

  1. # for x in `seq 1 1 10`; do ps -eo state,pid,cmd | grep "^D"; echo "----"; sleep 5; done 

查看到有kjournald这个进程

查看这个进程是做什么的?

kjournald是ext3文件系统记录文件系统日志的进程。

查看进程相关状态信息

  1. # cat /proc/487/io  
  2.  rchar: 48752567  
  3.  wchar: 549961789  
  4.  syscr: 5967  
  5.  syscw: 67138  
  6.  read_bytes: 49020928  
  7.  write_bytes: 549961728  
  8.  cancelled_write_bytes: 0 

查看都往哪写东西了

  1. # lsof -p 487 

引起kjournald 状态D的原因还在查。。。。

相关内容