tomcat cpu暴涨的原因之一及其解决方法
当你使用tomcat部署web系统时,过了一段时间发现cpu暴涨,你不防试试下面的方法,看看是否程序内的死循环导致cpu暴涨。
第一步:增加tomcat监控对外端口
在你的tomcat的bin目录下找到catalina.sh在cygwin=false 上一行
JAVA_OPTS="-server -Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:-UseGCOverheadLimit
-Dcom.sun.management.jmxremote.port=2222
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote=true
-Djava.util.logging.mannager=org.apache.juli.ClassLoaderLogManager"
注意修改为自己的ip和端口
-Dcom.sun.management.jmxremote.port=2222 //对外端口 (自定义)
-Djava.rmi.server.hostname=127.0.0.1//为本机IP(服务器IP)
第三步:开启jvisualvm监控
在你本机jdk的bin目录下找到jvisualvm.exe,例如我的目录为C:\Program Files (x86)\Java\jdk1.6.0_33\bin\jvisualvm.exe
1.双击运行程序
2.选择远程
3.添加远程主机,如:127.0.0.1
4.选择该主机
5.添加JMX连接
点击确定就行
因为-Dcom.sun.management.jmxremote.authenticate=false这里设置了false,所以不用输入用户名和口令
这里的用户名和口令不是服务器登陆的用户名和密码
双击该JMX连接
点击线程查看线程运行情况,一般只有main和一些监听程序一直是运行状态(runnable),
加入你有http-80- 类似的线程也一直处于运行状态,那就说明该执行该http请求有问题,甚至是死循环。
如图: