Разделение сессий Yourkit
У меня есть некоторый сегмент кода, который я хочу профилировать на разных входах (~1000), поэтому нет смысла запускать каждый тест вручную и сохранять результаты. Я использую yourkit в сочетании с Eclipse для профиля. Есть ли способ создать "новые сессии" для профилирования? Я хочу быть в состоянии разделить каждый прогон, чтобы это имело смысл.
2 ответа
Вам не нужно создавать "сессии" для каждого теста. Вместо этого вы должны сделать снимок данных профилирования в конце каждого теста и очистить данные профилирования перед запуском следующего теста.
Используя 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
}
}
Я не думаю, что вам нужно прекратить сбор, захватить снимок, очистить данные, возобновить сбор, вы можете просто захватить и очистить данные, но, пожалуйста, перепроверьте. После запуска тестов вы можете открыть снимки в своем комплекте и проанализировать данные профилирования.
К сожалению, не ясно, как запустить ваши тесты. Каждый тест выполняется в собственном процессе 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.