java - 如何分析 Java 程序从开始到结束的运行过程?

标签 java profiling performance-testing

我有一个仅运行大约 20-30 秒的 Java 程序,我想对其进行分析。

每次启动时手动启动 jvisualvm profiler 并不可靠,因为操作 UI 会损失几秒钟的时间。

是否有一种方法可以分析整个执行过程,例如旧的 -Xhprof:cpu=samples 不再有效?

最佳答案

使用 Flight Recorder,您可以添加到命令行

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder 
-XX:FlightRecorderOptions=defaultrecording=true,dumponexit=true,settings=profile

https://docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/run.htm#JFRRT176

它只记录新 TLAB 上的内存分配,因此我将其设置为比默认值小得多,以获得更多样本。

-XX:TLABSize=128k

您需要从$JAVA_HOME/bin目录运行jmc来打开创建的.jfr文件。

我发现它比 VisualVM 更难使用,但会产生更详细的结果,噪音更少。也就是说,分析器本身导致的分配要少得多。

关于java - 如何分析 Java 程序从开始到结束的运行过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52861208/

相关文章:

java - Struts 1 到 Struts2 JSP 标签库转换

java - Android Activity 在服务准备好之前访问服务的静态引用

java - 埃拉托色尼筛法算法 N 次运行期间执行时间出现峰值的原因

java - 是否可以通过编程方式为一种方法和它将调用的方法禁用 log4j?

css - 多少 CSS sprite 减少了页面加载时间?

javascript - 性能测试javascript的框架

java - 使用偏移量在 Kafka 中回溯过去

java - JProfiler 7.2.2 远程 JVM 崩溃

maven - 如何对maven执行的不同阶段进行计时

cookies - Jmeter 的 HTTP Cookie Manager 组件自动提取什么类型的 cookie?