Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在机器启动期间测量java服务性能?_Java_Scalability_Startup_Performance Testing_Java Service Wrapper - Fatal编程技术网

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

在机器启动期间测量java服务性能?,java,scalability,startup,performance-testing,java-service-wrapper,Java,Scalability,Startup,Performance Testing,Java Service Wrapper,我们有几个java应用程序,它们使用Tankui的java服务包装器作为Windows服务运行。当机器启动时(前30秒),我们的客户遇到了可伸缩性问题 传统上,我们使用jconsole/visualvm来监视Java虚拟机的运行状况。但是这些工具对于在机器启动期间捕获java.exe性能不是很好 我在谷歌上搜索了一个答案,我找到的最好的搜索结果是一篇题为“测量Java虚拟机的启动时间”的论文,但他们求助于在应用程序中插入JNI调用。我们希望采用侵入性较小的方法 在机器启动期间,能够捕获java.

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

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

我在谷歌上搜索了一个答案,我找到的最好的搜索结果是一篇题为“测量Java虚拟机的启动时间”的论文,但他们求助于在应用程序中插入JNI调用。我们希望采用侵入性较小的方法

在机器启动期间,能够捕获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对象内部锁

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


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

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