【问题标题】:How to profile a program that doesn't wait for user input to run and exits quickly如何分析不等待用户输入运行并快速退出的程序
【发布时间】:2014-10-15 12:15:45
【问题描述】:

在使用 VisualMV 等工具进行分析时,程序应该以什么顺序运行?我要分析的程序运行速度相对较快,不会等待用户关闭它。并不是说我可以真正快速启动程序,切换到 VisualVM 并启动分析过程,而无需先终止程序。

我所做的是在我的程序中添加了一行额外的代码,提示用户按 Enter 键开始。所以我启动我的程序,当它显示“按 Enter”时,我转到 VisualVM,找到正确的进程,转到分析选项卡并单击 CPU。 VisualVM 完成设置后,我将返回我的程序并按 Enter 键启动它。这是正确的吗?还是应该以不同的顺序完成?

显然分析只适用于当时正在运行的程序部分,对吧?

【问题讨论】:

  • 出于好奇,如果这个应用程序运行速度如此之快,传统的分析步骤不适用,您希望修复什么?
  • 传统的分析步骤如何不适用?
  • 我的意思是,通常情况下,由于某些性能问题,您在运行时对应用程序进行分析,或者作为检测内存泄漏或低效线程等的预防措施......但在您的情况下,代码似乎执行得很快,并且没有问题地关闭。鉴于此,您希望学习什么/您要解决的问题是什么?
  • 我有 3 种替代方法来实现相同的方法,所以这就是我正在测试的(在一个单独的项目中)。
  • visualvm.java.net/eclipse-launcher.html 是一个Eclipse 插件,用于与应用程序一起启动jVisualVM,但它不能解决程序运行时间短的问题。 Tomas Hurka 建议的“启动分析器”在这里似乎更合适(+1,也许我现在可以删除我偶尔插入的 for (1..10) { sleep(1000); } 循环,以便在启动后有足够的时间设置 jVisualVM 配置......)

标签: java profiling visualvm


【解决方案1】:

不确定 VisualMV,但在 JProfiler 中,您可以指定参数,这些参数将强制程序等待 JProfiler 连接。这样,在 JProfiler 启动并运行分析之前,程序的任何部分都不会运行。

【讨论】:

  • 如何以及在何处指定这些参数,在源代码中还是在分析器本身中?
  • 我认为 JProfiler 代理会强制 JVM 等待 JProfiler UI 连接。有一个参数可以覆盖此行为,因此即使 JProfiler 未连接,JVM 也会启动。例如。即使没有 JProfiler,此 JVM 参数也会启动您的应用程序:-agentpath:C:\PROGRA~1\JPROFI~1\bin\windows\jprofilerti.dll=port=8849,nowait。注意 nowait 标志。因此,它不是源代码,也不是分析器,而是在控制 JVM 被分析的分析器代理的参数中。
【解决方案2】:

对于 VisualVM 1.3.6 或更高版本,有一个名为 Startup Profiler 的插件。它允许您从头开始分析您的应用程序。

【讨论】:

  • VisualVM 似乎不是一个很好的程序。这个插件可以工作,但是如果我放入一个顶级循环来迭代整个程序,它只会在 VisualVM 运行时崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 2016-01-19
  • 2012-01-17
  • 1970-01-01
相关资源
最近更新 更多