IO会产生瓶颈, 但是我从来没有遇到过这种情况, 或者说遇到了也没注意, 之所以写这篇文章, 是回忆6月份的时候和朋友的交流。
朋友是个个人站长, 他的站数据量已经达到2000w+, 一个2g内存、双核cpu的小鸡(vps)上丢了十多个站, 某日, 朋友发现网站打开速度很慢, 于是各种查, 从cdn一直查到tomcat上, 最终发现是我的采集器太强大了。。。给他的小鸡造成了非常高的IO输入输出。
因为是个小说站, 采集的小说内容只能存为文件, 所以采集器必须不断的进行写文件操作, 同时网站流量、爬虫也在不断的产生读文件操作, 所以IO操作高峰一直持续, 无法降低。
最终朋友采用的解决方案是将数据库和数据文件独立出来, 放到另外一台vps上, 放置web应用的vps, 加载网络磁盘, 以本地调用的方式读文件。
这里总结下查看IO瓶颈的方法, 以备日后工作的不时之需。
1. vmstat
对于查看IO性能来说, 主要查看的就是si、so、bi、bo四列。如果不清楚vmstat命令的输出结果和每列含义的话, 请查看http://my.oschina.net/xiaoqqq/blog/384487
2.pidstat -d -t -p pid
输出结果如下:
02:10:46 AM TGID TID kB_rd/s kB_wr/s kB_ccwr/s Command
02:10:46 AM 1642 - 1.61 2.70 0.00 java
02:10:46 AM - 1642 0.00 0.00 0.00 |__java
02:10:46 AM - 1643 0.00 0.00 0.00 |__java
其中kB_rd/s、kB_wr/s分别表示每秒读入和写出的kB数。
3. iostat
直接在shell中输入iostat, 显示如下:
[root@v157-7-222-144 ~]# iostat
Linux 2.6.32-504.el6.i686 (v157-7-222-144.myvps.jp) 03/10/2015 _i686_ (3 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
97.28 0.00 0.82 0.00 1.41 0.48
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
vda 10.73 234.50 89.18 629319612 239342458
vdb 2.83 49.47 16.55 132766010 44410992
dm-0 16.65 233.73 87.76 627250202 235532832
dm-1 0.27 0.77 1.42 2063432 3809600
iostat只能显示整个系统的io情况, 不能跟踪具体进程。
tps表示每秒的IO请求数、Blk_read/s表示每秒读入的块数量、Blk_wrtn/s写出的块数量、Blk_read读入的块总量、Blk_wrtn写出的块总量。