Разделение сессий 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.

Другие вопросы по тегам