0

I have some segment of code I want to profile on many different inputs (~1000) so it doesn't make sense to manually run each test and save the results. I'm using yourkit in combination with Eclipse to profile. Is there any way to create "new sessions" for profiling? I want to be able to separate each run so that would make the most sense.

4

2 回答 2

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
  }
}

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

于 2014-03-28T08:03:19.940 回答
0

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

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

完整的选项列表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 类。

于 2014-03-27T10:52:17.270 回答