【问题标题】:Measure java service performance during machine startup?在机器启动期间测量java服务性能?
【发布时间】:2015-05-12 09:54:49
【问题描述】:

我们有几个使用 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 个系统对象时,一切都很好。但是当数据增加到 1000 个系统对象时

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

【问题讨论】:

  • 您看到什么样的可扩展性问题?请记住,由于 Java 的动态本机编译特性,Java 虚拟机需要一些时间来“预热”,在此期间执行的代码路径将被监视,并最终编译为本机代码。在此之前,整体性能可能会受到影响。
  • 你使用的是客户端JVM的服务器吗?服务器风格经过优化,可随着时间的推移获得更快的速度,但启动速度较慢,而客户端则经过优化,可实现最快的启动。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2018-04-05
    相关资源
    最近更新 更多