我经常使用VisualVM运行Java应用程序,但需要X才能在计算机上运行
我知道我可以通过管理端口连接,但这将是一个离线采样分析,这对我来说是不够的.
所以我正在寻找一种解决方案,我可以从命令行分析正在运行的Java应用程序的方法的CPU使用情况.这对我来说足以在服务器上收集数据,然后可以在不同的机器上分析收集的数据.
更新:
看来我需要更加具体.我想从命令行分析正在运行的Java应用程序,我不想阻止它并重新运行它.
我非常喜欢Flame Graph的概念,因为它有助于消除不必要的函数调用.然而,有一个问题是它需要分析器在每次收集样本时执行完整的堆栈转储.这可以通过DTrace或SystemTap轻松完成,但我需要能够在运行ubuntu的ARM设备上执行此操作(这会消除DTrace).我还想在不重新编译内核的情况下执行此操作(这会消除SystemTap).
是否有可能获得Valgrind/Callgrind或OProfile(或其他可以在Ubuntu中的ARM设备上运行的分析工具)输出类似于:
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }
profiling ×2
arm ×1
command-line ×1
java ×1
jvm ×1
linux ×1
performance ×1
stack-trace ×1
valgrind ×1