某日在检测一系统性能时,发现io性能总是无故被消耗,即使应用程序很空闲,io使用程度也
很高.


       使用iotop工具查看io情况.

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s   
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                          
 3584 be/4 mysql       0.00 B/s    0.00 B/s  0.00 %  0.00 % [jbd2/dm-0-8]
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
 1118 be/3 root        0.00 B/s    3.85 K/s  0.00 %  0.00 % auditd
 2152 be/4 mysql       0.00 B/s    3.85 K/s  0.00 %  0.00 % mysqld --basedir=/usr/local/Perco~--socket=/var/lib/mysql/mysql.sock
 1317 be/4 haldaemo  100.10 K/s    0.00 B/s  0.00 %  0.00 % hald
 3584 rt/4 mysql       0.00 B/s    0.00 B/s  0.00 %  0.00 % mysqld --basedir=/usr/local/Perco~--socket=/var/lib/mysql/mysql.sock
11027 rt/4 root      193.22 K/s    0.00 B/s  0.00 % 21.38 % plymouthd --mode=shutdown
 1317 be/4 haldaemo  297.56 K/s    0.00 B/s  2.39 %  8.33 % hald    
 1569 be/4 root       92.75 K/s    0.00 B/s  0.00 %  4.97 % console-kit-daemon --no-daemon       
  462 be/3 root       30.92 K/s    0.00 B/s  4.21 %  3.08 % udevd -d
 1118 be/3 root        0.00 B/s    3.86 K/s  0.00 %  0.00 % auditd       
 1283 be/4 root       30.92 K/s    0.00 B/s  0.00 %  0.00 % cupsd -C /etc/cups/cupsd.conf
  785 be/3 root       81.15 K/s    0.00 B/s  3.96 %  0.00 % udevd -d
 2122 be/4 apache    312.19 K/s    0.00 B/s 77.32 %  0.00 % httpd   d_usbd]
 2123 be/4 apache    312.19 K/s    0.00 B/s 77.66 %  0.00 % httpd         
 3497 be/4 apache    312.19 K/s    0.00 B/s 78.87 %  0.00 % httpd          
  376 be/3 root        0.00 B/s   11.05 K/s  0.00 %  2.84 % [jbd2/dm-0-8]
 2139 be/4 mysql       0.00 B/s    0.00 B/s  0.00 %  0.22 % mysqld --basedir=/usr/local/Perco~--socket=/var/lib/mysql/mysql.sock
 2152 be/4 mysql       0.00 B/s    3.68 K/s  0.00 %  0.00 % [jbd2/dm-0-8]
  376 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.12 % [jbd2/dm-0-8]
 2144 be/4 mysql       0.00 B/s   11.67 K/s  0.00 %  0.08 % mysqld --basedir=/usr/local/Perco~--socket=/var/lib/mysql/mysql.sock
 2154 be/4 mysql       0.00 B/s  155.62 K/s  0.00 %  0.06 % [jbd2/dm-0-8]
  376 be/3 root        0.00 B/s    0.00 B/s  0.00 %  0.04 % [jbd2/dm-0-8]

  发现大量jdb2进程占用io资源.jdb2进程是一个文件系统的写journal的进程,写的次数实在太频繁了,通过perf工具查看
系统相关的占用io的调用

Samples: 1K of event 'block:block_rq_issue', Event count (approx.): 1344
+  58.71%  jbd2/dm-0-8  [kernel.kallsyms]   [k] child_rip
+  12.87%  flush-253:0  [kernel.kallsyms]   [k] _spin_unlock_irqrestore
+  11.31%  flush-253:0  [kernel.kallsyms]   [k] child_rip
+   8.85%       mysqld  libpthread-2.12.so  [.] 0x000000000000ec0d
+   2.01%  jbd2/dm-0-8  [kernel.kallsyms]   [k] memset
+   1.19%       mysqld  [kernel.kallsyms]   [k] _spin_unlock_irqrestore
+   0.97%    kblockd/0  [kernel.kallsyms]   [k] child_rip
+   0.37%    kblockd/0  [kernel.kallsyms]   [k] _spin_unlock_irqrestore
+   0.37%  flush-253:0  [kernel.kallsyms]   [k] scsi_request_fn
+   0.37%           dd  [kernel.kallsyms]   [k] sha_transform
+   0.30%           ls  ld-2.12.so          [.] dl_main
+   0.30%  flush-253:0  [kernel.kallsyms]   [k] blk_queue_bio+  
 0.22%          who  ld-2.12.so          [.] memset+   
0.22%  jbd2/dm-0-8  [kernel.kallsyms]   [k] _spin_unlock_irqrestore+  
 0.22%  flush-253:0  [kernel.kallsyms]   [k] kmem_cache_alloc

可以看到jbd2/dm-0-8占用了将近60%的io资源。

查询得知此现像是由于bug造成,可以升级或是通过修改文件系统的提交次数来降低.更改 commit=60后的效果

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                          
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cgroup]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [async/mgr]
   12 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [pm]
   13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [sync_supers]
   14 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bdi-default]
   15 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd/0]
   16 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kblockd/0]
   17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpid]
   18 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpi_notify]
   19 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpi_hotplug]
   20 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ata/0]

perf报告也显示io已经不是由jbd2消耗

Samples: 11  of event 'block:block_rq_issue', Event count (approx.): 11
+  72.73%  flush-253:0  [kernel.kallsyms]  [k] child_rip                                                                                                            
+  18.18%      swapper  [kernel.kallsyms]  [k] tick_nohz_stop_sched_tick                                                                                            
+   9.09%    kblockd/0  [kernel.kallsyms]  [k] child_rip 

转载地址:http://blog.chinaunix.net/uid-20785090-id-4282589.html

附上commit修改方法,不过我的修改后效果不明显。修改commit不是彻底解决方法,继续研究!

mount -o remount,commit=60 /data

查看mount的man手册