有什么方法可以跟踪特定进程并获取磁盘 IO 的统计信息,例如队列深度、读/写线程总数、读/写百分比等?
主要目标是使用所有这些信息通过 fio 工具模拟 IO 活动。
或者可能有任何其他方式(工具)来估计哪些硬件可以更好地满足特定负载?
当然测试是最好的选择,但对我来说并不完全可用,我无法购买所有可能的硬件。
因此,我必须与购买前已经做出一些假设的产品进行比较。
有什么方法可以跟踪特定进程并获取磁盘 IO 的统计信息,例如队列深度、读/写线程总数、读/写百分比等?
主要目标是使用所有这些信息通过 fio 工具模拟 IO 活动。
或者可能有任何其他方式(工具)来估计哪些硬件可以更好地满足特定负载?
当然测试是最好的选择,但对我来说并不完全可用,我无法购买所有可能的硬件。
因此,我必须与购买前已经做出一些假设的产品进行比较。
您可以使用它
pidstat -d
来获取每个进程的 IO 统计信息。-p
如果您想获取特定进程的统计信息,请使用 - 例如,每秒获取 java 进程的磁盘统计信息:用于
iostat -x
扩展磁盘统计信息,例如“平均队列大小”等。另请参阅https://medium.com/netflix-techblog/linux-performance-analysis-in-60-000-milliseconds-accc10403c55
请注意,除非您正在执行“原始磁盘 IO”,否则文件系统操作系统层可能会对您的应用程序的性能产生巨大影响 - 例如,Linux 中的页面缓存会将文件的最新内容缓存在内存中,因此读取速度可能会远高于可能的速度仅通过磁盘。要监控文件系统操作,您可以使用 BPF 工具,如、
vfsstat
、biolatency
等。您还可以测量原始磁盘 IO 速度和“缓存 IO”速度 - 例如ext4slower
ext4dist
hdparm
请注意,与“缓冲磁盘读取”相比,“缓存读取”的吞吐量要大得多,接近 6GBs/秒。如果您使用中等大小的云/AWS 实例,可能会有更大的差异。