如何自动化 jprofiler 以保存具有不同参数的多个目标 java 程序的快照

How do I automate jprofiler to save snapshots of multiple target java programs with different arguments

我想分析我的 java 程序,我在其中打开一个文件并对其执行读写操作。要读取的文件是一个大 XML 文件,我想比较内存 stats/snapshots 以使用批处理/流读取/标准 xml 解析等技术解析文件

假设我们有三个程序,我想为其保存快照:

BatchParsing.java

public class BatchParsing {

  public static void main(String[] args) throws Exception {
      File = new File("path/to/file")
      // parse XML using batch logic
  }
}

StreamReading.java

public class StreamReadingParsing {

  public static void main(String[] args) throws Exception {
      File = new File("path/to/file")
      // parse XML using stream reader
  }
}

NormalParsing.java

public class NormalParsing {

  public static void main(String[] args) throws Exception {
      File = new File("path/to/file")
      // parse XML by loading whole file
  }
}

此外,我想分析的不是一个文件,而是多个不同大小的文件,而不是 运行 对不同文件的循环,我想通过 运行 每个文件来检查分析结果上述程序分别针对每个文件。

最后,我想按如下方式保存我的分析快照。

- snapshot_results
   - batch_results
      - small_file.jps
      - average_file.jps
      - large_file.jps
   - stream_results
      - small_file.jps
      - average_file.jps
      - large_file.jps
   - normal_parsing_results
      - small_file.jps
      - average_file.jps
      - large_file.jps

我可以使用 GUI 执行上述操作,但希望将所有这些操作自动化。我目前在 macOS 上使用 jprofiler 而不是 intelliJ。

要在没有 JProfiler GUI 的情况下进行分析,请使用 offline profiling。调用

会话->集成向导->新建远程集成

在 JProfiler 主菜单中,在“启动模式”步骤中选择“离线配置文件”选项。然后您将获得在离线模式下加载分析代理所需的 VM 参数。

要记录数据和保存快照,您可以使用触发器或分析 API。在你的情况下,profiling API 会更方便。

要记录 CPU 日期并保存整个应用程序的快照 运行,请像这样包装您的代码:

Controller.startCPURecording(true);
// Your code here
Controller.stopCPURecording();
Controller.saveSnapshot(new File("<snapshot name>.jps"));