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