我对Java EE应用程序的性能测量(cpu和磁盘I / O需求)感兴趣。
对于cpu,我已经想出了如何衡量每个方法调用的cpu需求。 通过在每个方法的开始和结束处调用java.lang.management.ThreadMXBean.getCurrentThreadcpuTime()(例如使用EJB拦截器),我可以得到cpu处理此方法所需的(“纯”)时间(cpu需求)。
不幸的是, I / O需求(磁盘:每个方法调用的读写时间)似乎很难衡量。 ThreadMXBean不提供这样的数据。 只是从每个方法的完整响应时间中减去上述测量的cpu需求是不够的,因为暂停和同步时间(如果可能的话,也可以很好地区分读和写)。
我正在考虑进一步挖掘 *** 作系统接口来尝试调用Syscalls或parsing其他内核信息。 目前我正在尝试了解像“sar”这样的工具如何测量“iowait”时间,以及如何将这些数据映射到Java线程和相应的方法。 但是我不确定我是否正朝着正确的方向前进,因为我的深层 *** 作系统知识是有限的。
内核模块为/ proc
如何禁止从linux内核模块访问键盘和鼠标?
将驱动程序编译为内核的一部分,而不是作为模块
如何在WinDbg中列出线程(内核deBUGging)
从用户模式与驱动程序通信的问题
长话短说 :我如何测量每个方法调用的I / O需求(磁盘读取和写入次数)?
在此先感谢,bkk
linux Kernel Module程序从IP获取域名
有可能有2个内核模块链接到相同的/ dev /设备?
在内存pipe理(linux)中关于函数arch_get_unmapped_area的问题
使用开发工作室5插件构build和编辑AndroID内核
call_usermodehelper / call_usermodehelperpipe用法
好的,最近我开发了一个小型的实用工具,用来测量我们的服务器的性能指标。 我使用Java Mission Control(jmc)来记录指标,然后解析记录文件。 在我的情况下,性能测试启动服务器并附加基准测试工具(但您可以将其配置为连接到已启动的实例 – 此链接提供了有关如何完成的更多信息)。 我将在这里提供一些关于你的用例的代码行。
1)在启动服务器之前,我将以下JMC配置添加到命令行中:
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=delay=5s,duration=120s,name=recording,filename=recording.jfr
所以在命令执行时,延迟5秒钟后,它以默认设置开始记录,并在120秒后生成报告文件。 2)我正在使用以下方法检索I / O统计信息:
FlightRecording flightRecording = FlightRecordingLoader.loadfile(new file(...)); IVIEw recording = flightRecording.createVIEw(); for (IEvent event : recording) { FLRMethod method = (FLRMethod) event.getValue("((stackTrace).method)"); /* this shows the bytes read by method at some invocation(if any),so for total bytes read by method you will need to sum manually */ long bytesRead = Long.valueOf(String.valueOf(event.getValue("bytesRead"))); }
你有很多东西需要探索,比如读取/写入文件的时间,读取次数等等。你需要尝试一下才能看到它的一些特性。 Java的最新版本与JMC捆绑在一起。 我只使用了Java 1.7和1.8
编辑:正如克拉拉指出的,你必须考虑到可以在你的设置文件中调整的阈值。 所以采取少于配置的阈值的 *** 作将不会被添加到JFR记录中。
总结以上是内存溢出为你收集整理的衡量方法调用的I / O需求全部内容,希望文章能够帮你解决衡量方法调用的I / O需求所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)