当我的Web应用程序处于空闲状态时,独立的tomcat 9每10秒就会将CPU上升到50%

问题描述 投票:5回答:4

我在Windows Server 2012 R2上使用Tomcat 9.0.0.M22和jdk1.8.0_131并且我在其上部署了一个Spring Boot Web应用程序,问题是,每隔10秒,commons守护程序服务运行程序将CPU增加到50%,尽管我部署的Web应用程序处于空闲状态,然后降低到0%,并且此行为每10秒继续发生一次。

在我的应用程序中,我没有任何每10秒运行一次的工作,而且当我从Eclipse运行我的Web应用程序时,我没有注意到相同的行为,所以我猜这是一个内置线程的Tomcat。

java tomcat cpu-usage windows-server-2012-r2 tomcat9
4个回答
1
投票
  • 一旦cpu加载峰值,就会执行一系列线程转储
  • 您可以使用jdk/bin/jvisualvm连接到您的tomcat并反复按线程选项卡右上角的线程转储按钮,或者如果您更喜欢命令行(例如通过脚本),您也可以使用jdk/bin/jcmd <pid-of-your-tomcat> Thread.Print >> dumps.txt
  • 每个转储显示当时存在的所有线程以及每个线程的堆栈跟踪,显示正在执行的内容
  • 这应该会给你一些提示,说明创建该负载的内容

0
投票

没有更多的信息,这只是猜测,但这可能是垃圾收集器试图每十秒钟完成它的工作但不能驱逐任何物品,因为它们仍然是需要的。您可以尝试增加Tomcat(-Xmx)的内存。


0
投票

有了这么多信息,这是非常艰难的,你可以想到几点:

  • 正如@jorg指出的那样,您可以获取线程转储,这将为您提供有关任何阻塞线程的见解。
  • 你说它在本地系统上运行良好,并不一定意味着代码对服务器平台来说是最佳的。仔细检查配置,maxThreads等。
  • 通过消除任何过多的垃圾收集来优化服务器JVM。使用更高的最大堆内存(-Xmx)启动JVM将降低垃圾收集发生的频率。
  • 现有的监控工具可以利用您的分析(jVisualVM)。

0
投票

我可以通过在context.xml中设置reloadable =“false”来完全停止此行为。

© www.soinside.com 2019 - 2024. All rights reserved.