我已经建立一个命令行的工具,它现在,我谨简介与YourKit.我启动命令行工具喜欢的东西:

$ java -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3

它运行,以完成在不到2秒钟。

在阅读 http://www.yourkit.com/docs/80/help/agent.jsp, 我试图如下:

$ java -agentpath:/home/dspitzer/yjp-8.0.24/bin/linux-x86-32/libyjpagent.so -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3

...我得到:

[YourKit Java Profiler 8.0.24] JVMTI version 3001016d; 14.3-b01; Sun Microsystems Inc.; mixed mode, sharing; Linux; 32-bit JVM
[YourKit Java Profiler 8.0.24] Profiler agent is listening on port 10001...
[YourKit Java Profiler 8.0.24] *** HINT ***: To get profiling results, connect to the application from the profiler UI
...

(然后对工具的运行,以完成并退出。)

我猜(默认情况下,至少)YourKit是设计只能连接到正在运行的应用程序。

我应该怎样修改我的命令行的工具,以允许连接从YourKit?

  1. 我可以添加一个命令行选项 这将有它暂停输入, 我不会回到 继续,直到我已经连接到它 从YourKit.
  2. 是否有一个YourKit API,我可以 加入到我的工具,这会导致它 来阻止我已经连接 YourKit?
  3. 是否有一个YourKit API或java 命令行的选择,会 创建一个分析"快照",我 可以负载和分析以后(后 该命令行工具已完成) 与YourKit?
有帮助吗?

解决方案

有没有办法要暂停分析的应用程序,直到探查 "连接";你根本不需要这样做。

相反,请做到以下几点:

  • 打开所需的分析的模式,从启动。例如,如果您 需要配置占用、开始或CPU采样,或者的CPU跟踪 与相应的启动选项中"取样"或"追踪".看看 http://www.yourkit.com/docs/80/help/additional_agent_options.jsp

  • 如果分析的应用程序是短期运行,启用快照捕捉 退出"onexit=快照"启动的选择。稍后开放的捕获 快照在探查的用户界面分析。

其他提示

我不知道还有一个YourKit选择这样做(这并不是说,没有一个),但也有 Java遥调试中选择这样做。

尽量添加以下您的命令行,除YourKit剂的选择:

-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y

这应该导致VM暂停尽快开始了,在等待一个调试器连接在港口8000.YourKit本身不是一个调试器,但IDE喜欢食或Netbean将做的工作,作为将基本的 jdb 命令行。

所以运行的命令,这两个选项的设置、连接YourKit,然后用一个调试器连接到"调试"口,这将触发虚拟机继续执行,允许YourKit得到你需要的数据。

它将更好地这样做的所有使用YourKit,但我知道没有这样的方式。

你可以启动它通过日食,其中有一个YourKit插件,发布在程序启动。

YourKit的onexit=快照选项节省了快拍下的文件$HOME/快照上JVM出口。你可以载入这个快照入YourKit GUI后分析。看看 这页 在他们的网站了解更多详情。

答案#3是肯定的,那里有一个API可用于将应用程序产生的分析结果,YourKit然后可以审查。

看看 API文档, ,并且还 命令行的工具,以控制的分析

这是一个例子使用API(我没有尝试过这种代码):

Controller ykController = new Controller();
ykController.enableStackTelemetry();
ykController.enableExceptionTelemetry();
ykController.startCPUProfiling(ProfilingModes.CPU_TRACING,Controller.DEFAULT_FILTERS);
ykController.startAllocationRecording(false,0,false,0);
YourMainClass.main(args);
String snapshotLocation = ykController.captureMemorySnapshot();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top