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

时间:2015-03-10 19:35:06

标签: java scalability startup performance-testing java-service-wrapper

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

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

我搜索了一个答案,我找到的最佳搜索结果是一篇题为“测量Java虚拟机启动时间”的论文"但是他们使用JNI电话http://www.mii.lt/olympiads_in_informatics/pdf/INFOL073.pdf来测试应用程序。我们宁愿采用侵入性较小的方法。

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

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

  • 1,100个JVM线程并发运行
  • 线程X在Java读写锁上持有写锁C1正忙于使用Hibernate / c3p0 / JDBC / MySQL更新系统对象的一部分
  • 线程Y持有结构P的JVM对象内部锁,正在等待获取Java读写锁C1的读锁,以使用Hibernate / c3p0 / JDBC /从数据库中读取系统对象的另一部分MySQL的
  • 线程Z正在等待获取结构P的JVM对象内部锁。

1 个答案:

答案 0 :(得分:0)

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

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