首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分析java进程触发的IO活动?

如何分析java进程触发的IO活动?
EN

Stack Overflow用户
提问于 2021-11-26 13:19:03
回答 2查看 49关注 0票数 1

目前,我知道有一些工具可以分析java进程的CPU/内存。

当我想要跟踪java进程如何与IO交互时,我没有找到任何用于检查细节的工具。尤其是针对哪些线程/调用堆栈和使用。

我可以使用的工具是一些操作系统级别的命令,比如dstat

有没有什么工具可以评测java的磁盘IO?

EN

回答 2

Stack Overflow用户

发布于 2021-11-28 11:22:41

有没有什么工具可以用来分析java的磁盘IO?

一些JVM分析器具有处理文件访问的探测器。例如,JProfiler有一个文件探测器,可以测量java.io和java.nio的读写操作。

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

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

免责声明:我的公司开发JProfiler

票数 1
EN

Stack Overflow用户

发布于 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%。这会让程序员失望吗?不是的。这让他们对感到高兴,因为它似乎告诉他们他们的代码是最优的!这是一个悖论吗?是。分析器之所以流行,正是因为它们不能工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70125051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档