分离Yourkit会话

时间:2014-03-25 20:06:52

标签: java eclipse profiling yourkit

我想要在许多不同的输入(~1000)上分析一些代码段,因此手动运行每个测试并保存结果没有意义。我将yourkit与Eclipse结合使用以进行配置。有没有办法创造"新会议"用于剖析?我希望能够将每次运行分开,以便最有意义。

2 个答案:

答案 0 :(得分:1)

你真的不需要创建"会话"每次测试。相反,您必须在每次测试结束时捕获性能分析数据的快照,并在运行下一次测试之前清除性能分析数据。

使用yourkit API,您可以采用与以下类似的方式执行此操作:

public void profile(String host, int port, List<InputData> inputDataSet) {
  Map<InputData, String> pathMap = new HashMap<InputData, String>(); //If you want to save the location of each file

  //Init profiling data collection
  com.yourkit.api.Controller controller = new Controller(host, port);
  controller.startCPUSampling(/*with your settings*/);
  controller.startAllocationRecording(/*With your settings*/);
  //controller.startXXX with whatever data you want to collect

  for (InputData input: inputDataSet) {
    //Run your test
    runTest(inputData);

    //Save profiling data
    String path = controller.captureSnapshot(/*With or without memory dump*/);
    pathMap.put(input, path);

    //Clear yourkit profiling data
    controller.clearAllocationData();
    controller.clearCPUData();
    //controller.clearXXX with whatever data you are collecting
  }
}

我认为您不需要停止收集,捕获快照,清除数据,重新开始收集,您可以捕获并清除数据,但请仔细检查。 运行测试后,您可以在yourkit中打开快照并分析分析数据。

答案 1 :(得分:0)

不幸的是,目前还不清楚如何运行测试。每个测试是在自己的JVM进程中运行还是在单个JVM中的循环中运行所有测试?

如果您在自己的JVM中运行每个测试,那么您需要1)使用探查器代理运行JVM,即使用-agentpath选项(详细信息在此http://www.yourkit.com/docs/java/help/agent.jsp)。 2)指定在JVM启动时分析的内容(代理选项&#34;采样&#34;,&#34;跟踪&#34;等)3)在JVM出口上捕获快照文件(&#34; onexit&#34;代理商选择)。

选项的完整列表http://www.yourkit.com/docs/java/help/startup_options.jsp

如果在单个JVM中运行所有测试,则可以使用分析器API http://www.yourkit.com/docs/java/help/api.jsp在测试开始之前开始分析,并在测试完成后捕获快照。您需要使用com.yourkit.api.Controller类。