目前,我知道有一些工具可以分析java进程的CPU/内存。
当我想要跟踪java进程如何与IO交互时,我没有找到任何用于检查细节的工具。尤其是针对哪些线程/调用堆栈和使用。
我可以使用的工具是一些操作系统级别的命令,比如dstat。
有没有什么工具可以评测java的磁盘IO?
发布于 2021-11-28 11:22:41
有没有什么工具可以用来分析java的磁盘IO?
一些JVM分析器具有处理文件访问的探测器。例如,JProfiler有一个文件探测器,可以测量java.io和java.nio的读写操作。

测量结果通过文件进行解析:

出于性能方面的考虑,文件探测器的热点视图显示了哪些文件占用了磁盘I/O的大部分时间,并为每个文件提供了可扩展的回溯跟踪。

免责声明:我的公司开发JProfiler
发布于 2021-11-26 14:33:11
这是非传统的,但很容易。做就行了。
很难找到一个分析器,a)在时钟时间而不是CPU时间上工作,b)采样调用堆栈,而不仅仅是IP,c)采集少量样本而不是大量样本。
记住,你的首要目标是定位和解决问题,所以你可以修复它,不仅仅是timing它,而是想知道它是什么。问题越大,随机停止的可能性就越大,并确切地告诉你它在做什么以及为什么。
问题有多大?如果一个问题花费了X%的时间,那么X%就是你通过修复它所能节省的最多时间。因此,如果X是10%或更少,为什么要麻烦呢?假设X%大于10%,那么每个样本都有落地的概率。因此,如果你取N个样本,它陷入问题的次数是N乘以X% (平均值)。
你需要多少样品?好吧,如果你看到程序在一个样本上做了一些浪费的事情,那么你是否找到了它是值得怀疑的。但是,如果您在两个示例上看到它在做同样浪费的事情,那么统计数据表明您已经发现了问题!在你看到问题之前,N越小,它就越大!你知道它到底有多大吗?不,你并不关心,因为你知道它足够大,可以修复。(如果您想要更多信息,请获取更多样本。我的考试从来不会超过20次。)(您始终可以在之后使用简单的计时器测量加速比。)
是否存在多个问题?当然有!如果你解决了一个问题,那么剩下的问题就会变得更大!例如,可能有两个问题,问题A的成本为50%,问题B的成本为25%。第一次看的时候,你发现了问题A,解决了它,现在问题B的成本是50%,而不是25%。把它们都修好,你的速度会快4倍。(这是放大效果。)(如果你碰巧先修复了B,没问题。现在A在67%的情况下是。)
寓意:不要停止寻找和修复,直到你找不到你可以修复的东西。
分析器通常会发现一些不太重要的东西,而且/或者你也无法修复它们。比如在一些晦涩的图书馆例程中有5%。这会让程序员失望吗?不是的。这让他们对感到高兴,因为它似乎告诉他们他们的代码是最优的!这是一个悖论吗?是。分析器之所以流行,正是因为它们不能工作!
https://stackoverflow.com/questions/70125051
复制相似问题