我遇到了一个非常特殊的问题。我的 tomcat 以大约 25% 的 CPU 24/7 完美运行,但有时我的 CPU 会飙升至 60%,系统会停止运行并且无法恢复。
当我在减速期间进行线程转储时,几乎所有线程都忙于某种字符串或相关操作。
没有 OutOfMemory 错误或任何异常被抛出,所有请求仍然得到处理,但响应时间恶化到第 n 度,即使是亚秒请求也会减慢到 60 秒甚至更多。
我的服务器配置如下:
Ubuntu 12.04.2 LTS
Linux 3.2.0-38-virtual #60-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
java版本“1.7.0_13”
Java(TM) SE 运行时环境 (build 1.7.0_13-b20)
Java HotSpot(TM) 64 位服务器 VM(内部版本 23.7-b01,混合模式)
导出 JAVA_OPTS='-服务器
-Xms18g -Xmx18g
-XX:MaxPermSize=512m
-XX:ThreadStackSize=512
-XX:新比率=1
-XX:幸存者比率=4
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSClassUnloadingEnabled
-Xloggc:/usr/tomcat/logs/gc.log
-XX:+PrintGC详情
-XX:+打印GCDateStamps
-XX:+PrintTenuringDistribution
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.awt.headless=true'
单击此处下载线程转储。我已经删除了大部分线程及其 stackTraces
关于这个原因的任何想法?谢谢