文件IO消耗分析

Linux在操作文件时,将数据放入文件缓存区,直到内存不够或系统要释放内存给用户进程使用,因此在查看Linux内存状况时经常会发现可用(free)的物理内存不多,但是cached用了很多,这是Linux提升文件IO速度的一种做法。在这样的做法下,如物理空闲内存够用,通常在Linux上只有写文件和第一次读取文件时会产生真正的文件IO。

在Linux中,要跟踪线程文件IO的消耗,主要方法是通过pidstat

输入 pidstat -d -t -p[pid] 1 100 

其中KB_rd/s表示每秒读取的kb数,kb_wr/s表示每秒写入的kb数


isostat命令

当文件IO消耗过高时,对于JAVA应用最重要的是找到造成文件IO消耗过高的代码,寻找的最佳方法通过pidstat直接找到文件IO操作多的线程。之后结合jstack找到对应的java代码,如果没有pidstat也可以根据jsstack得到的线程信息来分析其中文件IO操作较多的线程。

JAVA应用造成文件IO消耗严重主要是多个线程需要进行大量内容写入(例如频繁的日志写入)的动作;或磁盘设备本身的处理数度慢;或文件系统慢;或操作的文件本身已经很大造成的。

事例在分布式JAVA应用184页


你可能感兴趣的:(文件IO消耗分析)