监控与分析
一、系统级 IO 监控
1. iostat 工具
统计的是通用块层经过合并后,直接向设备提交的 IO 数据,可以反映系统整体的 IO 状况,但是有如下缺点:
- 距离业务层比较遥远,和代码中的 read、write 不对应(由于系统预读、pagecache、IO 调度算法等)
- 是系统级,没有办法精确到进程,比如得知磁盘很忙,但是没办法告诉我们谁在忙?忙什么?
二、进程级别 IO 监控
1. iotop 和 pidstat 工具
都是依赖 /proc/pid/io
文件导出的统计信息。可以得知:
- 当前系统哪些进程在占用 IO,百分比是多少?
- 占用 IO 的进程是在读?还是在写?读写量是多少
但是这两个工具统计的粒度较粗,没有办法得知当前进程读写了哪些文件?耗时以及大小?
三、业务级 IO 监控
1. ioprofile 工具
本质上是 lsof 和 strace 的组合。可以解决这几个问题:
- 当前进程某时间内,在业务层面读写了哪些文件?
- 读写次数是多少?(read、write 的调用次数)
- 读写数据量多少?(read、write 的 byte 数)
https://blog.yufeng.info/archives/995
四、文件级 IO 监控
主要针对单个文件,查看当前那些进程正在对某个文件进行读写操作
- lsof 或者
/proc/pid/fd
1. lsof 工具
查看当前目录有哪些进程打开:
1 | # /tmp 目录,查看当前打开 tmp 目录的进程 |
lsof 命令只能查看静态信息,并且打开并不代表一定读取了,对于 cat、echo 这种转瞬即逝的操作,lsof 捕捉不到