在自动化 Java 性能测试期间监控和记录系统指标的工具

Tool to monitor & log system metrics during automated Java performance tests

我们有一个在其核心中使用 Spring 集成的应用程序,并创建了性能测试以查看不同生成的输入类型的处理速度 (msgs/sec)。

此过程是自动化的,因此每当进行此类测试时 运行,都会在云中创建一个单独的实例,并在完成并复制输出工件后进行处理。

我想做的是在 运行 期间监控这些性能测试以获取基本系统指标 -- CPU、内存、I/O、GC runs/time .显然,其结果应该是一些带有指标读数的 CSV 文件(例如,每秒一次或两次)。

所以我的问题是:是否有用于这些目的的任何好的可配置工具?

我正在调查中,但到目前为止我审查的分析工具主要需要人机交互,并且是 UI 导向的。

我正在考虑的一个选项是编写一个单独的工具来访问 MXBean 并在性能测试期间使用它来记录此类数据。只是想知道周围有没有什么好东西。

请注意,此应用程序 运行 正在 Tomcat 中运行,但是对于性能测试,我们仅使用 Spring 集成的文件端点。

另请注意,应用程序中的 'switchable' 组件也是可能的解决方案。但是,我目前正在寻找与应用程序无关的外部工具优先解决方案。

命令行工具可以帮助解决这种情况:

在基于 Linux/Solaris 的环境中:

  1. 在 run/trigger 基于 Spring 的应用程序的 JVM 之前,您可以 运行 在后台模式下使用 vmstatsar 等工具及其输出重定向到平面文件 - 这有助于捕获 CPU、内存和其他此类统计信息。使用带选项的 topmpstat 获取线程级统计信息(如果您似乎遇到了性能问题),以进行瓶颈分析。
  2. 现在 运行 JVM 使用 printgc-Xloggc 等参数将 JVM 详细输出写入平面文件或打印 gc 静态信息。在 Java HotSpot VM Options 中的 JVM 参数的调试选项部分下查看您需要的更多选项。

提示: 创建一个 shell 脚本,同时将上述两个命令组合到 运行 并实现您的要求。

Windows 环境中:

  1. 对于 OS 在命令行上收集统计信息,您可以使用 typeperf 或 tracerpt(支持 CSV)。
  2. 现在 运行 JVM 使用 printgc-Xloggc 等参数将 JVM 详细输出写入平面文件或打印 gc 静态信息。在 Java HotSpot VM Options 中的 JVM 参数的调试选项部分下查看您需要的更多选项。

Jmeter 是一种开发性能和可伸缩性测试的工具(定义 http 请求并能够用它们加载服务器),但也有一个插件可以监控目标系统的系统指标,例如 CPU 利用率、内存利用率等以及 JMX 类型统计信息:

Available JMX metric types:

gc-time - time spent in garbage collection, milliseconds (used method) memory-usage - heap memory used by VM, bytes (method used) memory-committed - heap memory committed by VM, bytes (method used) memorypool-usage - heap memory pool usage, bytes (method used) memorypool-committed - heap memory pool committed size, bytes (method used) class-count - loaded class count in VM (used method) compile-time - time spent in compilation, milliseconds (used method)"

检查 http://jmeter-plugins.org/wiki/PerfMonMetrics/ 了解此插件的更多详细信息。