1.占用CPU过高
2.出现内存泄漏,占用的内存持续增加
3.出现资源争抢,性能低下
4.死锁
下面分别针对这几个场景说一下如何处理。
1.对于CPU高的情况
1)通过top命令查找占CPU高的线程:
命令样例:top -Hp 4939 -d 1 -n 1 (其中4939为java进程ID)
http://blog.csdn.net/arkblue/article/details/8719727
http://blog.csdn.net/hexin373/article/details/8846919
2)通过jvisualvm工具,通过jmx方式连接到java进程上,然后选择“抽样器”,点击“CPU”,选择“线程CPU时间”,就可以看到占用CPU最高的线程了,然后查看这个线程当前的执行堆栈,就可以知道问题在哪里了
调优利器
1. jmap 对java堆内存生成dump文件
命令样例:jmap -dump:format=b,file=javadump.bin 4939 (其中4939为java进程ID)
http://blog.csdn.net/fenglibing/article/details/6411953
2.jstack 查看java线程调用栈
命令样例:jstack 4939 > jstack.txt (其中4939为java进程ID)
http://blog.csdn.net/fenglibing/article/details/6411940
3.jvisualvm/jconsole
通过jmx方式连接远程tomcat配置:
http://blog.csdn.net/airobot008/article/details/3951524
4.内存分析工具MAT(eclipse插件)
MAT下载地址:http://www.eclipse.org/mat/downloads.php (有eclipse和独立安装包)
eclipse插件更新地址: http://download.eclipse.org/mat/1.3.1/update-site/
独立安装包:http://www.eclipse.org/downloads/download.php?file=/mat/1.3.1/rcp/MemoryAnalyzer-1.3.1.20140107-win32.win32.x86.zip
MAT工具介绍:http://wiki.eclipse.org/index.php/MemoryAnalyzer
http://www.360doc.com/content/12/1023/14/203871_243274421.shtml
java死锁检测样例(通过jconsole可以直接检测出死锁):
http://babyduncan.iteye.com/blog/1880231
资料:
JVM调优总结: http://wenku.baidu.com/view/5fb0770c4a7302768e99394d.html
使用 VisualVM 进行性能分析及调优:http://www.ibm.com/developerworks/cn/java/j-lo-visualvm/
HPROF命令详解:
-Xrunprof:file=java.prof,thread=y,depth=3
http://www.cnblogs.com/ggjucheng/archive/2013/10/05/3352332.html