松花皮蛋的黑板报
  • 分享在京东工作的技术感悟,还有JAVA技术和业内最佳实践,大部分都是务实的、能看懂的、可复现的

扫一扫
关注公众号

快速定位磁盘IO异常的套路

博客首页文章列表 松花皮蛋me 2019-03-10 11:35

一、性能指标

1、存储空间的使用情况

2、索引节点的使用情况

3、缓存使用情况,包括页缓存、目录项缓存、索引节点缓存和各个具体文件系统(如ext4\xfs)的缓存

4、磁盘本身情况,如使用率、IOPS、吞吐量、响应时间、读写类型、读写比例、读写大小、存储类型

二、性能工具

三、套路

1、先用iostat发现磁盘IO性能异常
2、再借助pidstat,定位到进程
3、分析进程的IO行为
4、结合应用程序的原理,分析IO的来源

进程IO行为分析Strace用法:

strace -tt -T -f -e trace=file -o /export/servers/strace.log -s 1024 -p 18062

-tt 在每行输出的前面,显示毫秒级别的时间
-T 显示每次系统调用所花费的时间
-v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。
-f 跟踪目标进程,以及目标进程创建的所有子进程
-e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称,trace, abbrev, verbose, raw, signal, read, write
-o 把strace的输出单独写到指定的文件
-s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
-p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可

-e trace=file 和跟踪和文件访问相关的调用(参数中有文件名)
-e trace=process 和进程管理相关的调用,比如fork/exec/exit_group
-e trace=network 和网络通信相关的调用,比如socket/sendto/connect
-e trace=signal 和信号发送和处理相关,比如kill/sigaction
-e trace=desc 和文件描述符相关,比如write/read/select/epoll等
-e trace=ipc 和进程通信相关,比如shmget等