【发布时间】:2015-08-09 16:56:52
【问题描述】:
我对 Java EE 应用程序的性能测量(CPU 和磁盘 I/O 需求)感兴趣。
对于CPU,我已经弄清楚了如何衡量每个方法调用的 CPU 需求。通过在每个方法的开头和结尾调用 java.lang.management.ThreadMXBean.getCurrentThreadCpuTime()(例如使用 EJB 拦截器),我可以获得 CPU 处理此方法所需的(“纯”)时间(CPU需求)。
不幸的是,I/O 需求(磁盘:每个方法调用的读写时间)似乎很难衡量。 ThreadMXBean 不提供此类数据。由于暂停和同步时间,仅从每种方法的完整响应时间中减去上述测量的 CPU 需求是不够的(如果可能的话,最好区分读取和写入)。
我正在考虑深入挖掘操作系统接口以尝试调用系统调用或解析其他内核信息。目前,我正在尝试了解“sar”之类的工具如何测量“iowait”时间以及如何将这些数据映射到我的 Java 线程和相应的方法。但我不确定我是否朝着正确的方向前进,因为我对操作系统的深入了解有限。
长话短说:我如何衡量每个方法调用的 I/O 需求(磁盘读取和写入时间)?
提前感谢,bkk
【问题讨论】:
-
您需要以编程方式进行吗?你使用的是什么JDK?您需要经常运行它还是可以偶尔运行它?
-
最好是针对所有 JDK 的解决方案,但我也对 JDK 特定的解决方案感到好奇。我想在负载测试期间生成 I/O 测量值以进一步研究我的应用程序,但这里也是如此:所有解决方案都值得赞赏。
-
@bkk87-你甚至可以使用某种 Profiler 来达到同样的效果