在机器启动期间测量 java 服务性能?

Measure java service performance during machine startup?

我们有几个 java 应用程序,它们 运行 作为 Windows 服务使用 Tankui 的 java 服务包装器。我们的客户在机器启动时(前 30 秒)遇到了可伸缩性问题。

传统上,我们使用 jconsole/visualvm 来监控 Java 虚拟机运行状况。但是这些工具对于在机器启动期间捕获 java.exe 性能不是很好。

我用谷歌搜索了一个答案,我找到的最佳搜索结果是一篇标题为 "Measuring the Startup Time of a Java Virtual Machine" 的论文,但他们求助于使用 JNI 调用 http://www.mii.lt/olympiads_in_informatics/pdf/INFOL073.pdf 检测应用程序。我们更喜欢侵入性较小的方法。

有什么好的外部工具或技术能够在机器启动期间捕获 java.exe 统计信息(线程计数、堆使用等)?

@djmorton 要求定义可伸缩性问题。问题是,当应用程序监视 100 个系统 objects 时,一切都很好。但是当数据增加到1000系统objects then

我们最终在离线模式下使用了 JProfiler。 JProfiler 允许您根据 JVM 启动设置触发器。 JProfiler 让我们在 Java 服务启动期间获取各种 JVM 遥测数据,如线程计数,以及 Java 锁争用、线程转储等。

我们不得不解决一个 Windows 文件权限问题。 JProfiler 想要创建一个临时文件,但在此环境中,JProfiler 运行正在使用 LocalSystem 帐户的 Windows 服务中。解决方法是临时将服务设置为 运行 作为管理员。