当你使用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请求有问题,甚至是死循环。 
如图: 

 

 

课外:tomcat优化一种方式在catalina.sh/bat添加这段:JAVA_OPTS="-server -Djava.security.egd=file:/dev/./urandom -Xms512m -Xmx1024m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=1024m  -XX:NewRatio=8 -XX:MaxTenuringThreshold=50 -XX:+DisableExplicitGC -XX:-UseGCOverheadLimit"