如何以非交互方式分析Java应用程序?

时间:2013-07-02 19:46:39

标签: java profiling

我想要做的是在Java应用程序执行脚本任务时生成一个带有CPU计时信息的调用树。我们的想法是看看代码的每个部分花了多少时间,以及在我更改代码或任务时如何改变,但是以一致的可重复方式这样做。

在Java VisualVM中,我可以通过单击开始和停止分析来交互式地执行此操作,但我希望自动化该过程,以便我可以获得更一致的结果(并且不会觉得无聊)。 VisualVM可以执行此操作,还是可以使用其他分析器?

1 个答案:

答案 0 :(得分:-1)

如果我是一名探查器供应商,我必须关心为人们提供他们认为他们想要的东西,即使他们认为他们想要的并不能解决他们所拥有的问题。

问题是,通过了解惯例通常需要多长时间才能找到一些问题,如果你忽略了那些你不能找到的问题,它们将成为你的程序需要多长时间的主要部分。

我的意思是最近的一个例子: 程序花费50%的挂钟时间读取.dll文件来查找字符串资源以获取文件名,以便字符串可以在启动屏幕上显示,以便用户可以看到在应用程序启动期间发生了某些事情。这意味着,如果有其他方式为用户提供吸引眼球,该应用程序可以启动两倍的速度。 在此过程中,调用堆栈通常具有15-20个函数深度,因此很难通过函数的时序数来判断正在进行的操作。

使问题困难的是它是语义。没有特别的例行公事#34;热"以一种可以加速的方式。 唯一的#34; hot"总的来说,这是程序正在做什么的一般描述,没有工具可以为你隔离它。 只有你能认出来。

但是,如果您只是在启动期间中断了程序并检查了调用堆栈,则概率为50%,您将看到花费时间的整个解释。 如果你多次这样做,它是一些程序员所依赖的random pausing technique的基础,因为它会发现分析者可以找到的所有问题,以及更多,而其他人看不起因为它不是''工具。

以交互方式进行,或使用与 pstack 类似的内容提取少量堆栈样本。