Java磁盘使用情况分析

6

我希望能够对使用JCS进行缓存的应用程序进行性能分析。我已经使用了NetBeans IDE自带的默认分析器,并且它对内存的分析结果是令人满意的。但是,由于我的应用程序将项目缓存在磁盘中,我想要验证其磁盘使用情况的性能。是否有一种方法可以使用NetBeans自带的分析器或任何商业分析器(如JProfiler)来完成这项任务。


你想要分析什么?如果你想知道大小,可以使用du或类似的命令(在Windows上)。如果你想知道访问磁盘所花费的时间百分比,可以查找对磁盘的读取(read())和写入(write())调用。 - Peter Lawrey
我正在尝试分析在过程中写入磁盘的对象数量以及消耗的磁盘I/O量。 - Madusudanan
磁盘消耗的空间正好等于已使用的空间。通过这个可以估算出写入的对象数量。 - Peter Lawrey
2个回答

6

JProfiler有一个文件探针,可以显示以下内容:

  • 文件时间线和它们上面的I/O活动情况
  • 所有文件及其I/O统计信息的列表
  • "热点",即在其中执行大多数读/写操作的文件,以及与您的代码相关的累积回溯
  • 总读写吞吐量的遥测数据
  • 显示单个I/O操作的"事件"视图

enter image description here

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

感谢您的贡献,但目前我正处于测试环境下,必须展示可靠的配置文件结果,才能进入到实际环境并获取大量数据。然而,在测试环境中使用此工具,我无法在读/写吞吐量中看到任何数据,而且我的缓存大小当前只有10 MB或更少。JProfiler通常显示磁盘I/O,还是通过使用java.io包来进行操作?因为我认为JCS不会使用java.io将文件写入磁盘。 - Madusudanan
文件探测支持java.io和java.nio。您可以先查看调用树视图以检查JCS实际上正在执行什么操作。 - Ingo Kegel
调用树显示了调用方法和被调用方法,但在内部,JCS使用队列异步地写入磁盘。这就是我遇到的真正问题所在,我需要可视化从该队列中写入文件的方式。就磁盘使用模式而言,JProfiler做得很好。但我的情况有点不同。 - Madusudanan
好的,但是如果您在文件探针中没有看到任何内容,这意味着JCS没有在同一JVM中将任何内容写入磁盘。 - Ingo Kegel
好的,谢谢您的回答。我会保持这个问题的开放状态一段时间,看看是否会有其他的答案出现。 - Madusudanan

3

您可以使用JProfiler中的内置探针来完成此操作。


以及 YourKit,可能还有其他的。 - Peter Lawrey
我已经安装了JProfiler并阅读了用户指南。但是是否有一种方法可以按方法显示磁盘使用情况? - Madusudanan
我也愿意考虑使用其他工具,无论是商业的还是开源的。我只需要在字节级别或对象级别进行磁盘I/O分析。 - Madusudanan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接