【问题标题】:Profiling application with VisualVM使用 VisualVM 分析应用程序
【发布时间】:2013-12-29 12:54:36
【问题描述】:

假设您有一个命令行应用程序,它接受输入文件并对其进行处理。现在假设您想要对这个应用程序进行采样/分析。如果是 Visual Studio,您只需选择分析方法(采样/仪器),VS 将为您运行应用程序并在程序完成时收集数据。但据我所知,VisualVM 中没有类似的功能。您必须运行您的应用程序,然后在 VisualVM 中选择它,然后显式开始采样/分析。问题是有时执行具有某些输入数据的程序所花费的时间少于设置 VisualVM 所需的时间。同样使用这种方法,不可能批量分析应用程序。有人建议从 Eclipse 以调试模式启动应用程序,并在 main() 方法的开头某处设置断点。然后设置 VisualVM 并继续执行。但我怀疑在 Debug vs Release 模式下运行本身会对性能产生影响。 有什么建议吗?

【问题讨论】:

    标签: java profiling visualvm


    【解决方案1】:

    如果程序执行 I/O,Visual Studio 采样器将看不到 I/O,因为它是一个“CPU 采样器”(即使几乎所有时间都花在等待 I/O)。

    如果您使用 Instrumentation,您将看不到任何行级信息,因为它仅在函数级别进行汇总。

    我使用this technique

    如果程序运行得太快而无法采样,只需在其周围放置一个临时外循环,例如 100 或 1000 次迭代。

    Debug 和 Release 模式之间的区别几乎没有,除非您花费大量时间在紧密循环中,在您的代码中,其中循环不包含任何函数调用,或者如果您正在执行在库中进行大量验证的数据结构操作。

    如果您是,那么您的样本将显示您是,并且您会知道 Release 会产生速度差异。

    就批处理分析而言,我不知道。我只关注程序的整体吞吐率。如果有一些输入似乎使它花费了太长时间,那么我使用该输入在程序上执行采样过程,看看问题是什么,然后解决它。

    【讨论】:

      【解决方案2】:

      VisualVM 1.3.6 有一个新的Startup Profiler plugin,它允许您从应用程序启动时对其进行分析。有关更多信息,请参阅此article

      【讨论】:

        猜你喜欢
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2015-01-29
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 2012-07-23
        • 2015-09-12
        相关资源
        最近更新 更多