遇到问题怎么办:
查看日志tail -f catalina.out
查看应用进程 ps -ef | grep java
查看CPU情况
查看TCP情况 ping
查看java线程,jstack
查看java堆,jmap
通过memory analyser tool 分析.dat堆文件,看shallowed heap和retained heap,寻找无法被回收的对象
解决方式:如可以把有问题的对象置为static,每个类只保有一份
top查看占用cpu最多的进程
然后top -Hd 查看某进程下所有线程
nid是操作系统中线程Id,pid是java中线程Id
然后jstack 进程|grep 线程的十六进制数 看具体堆栈
详情:
top发现系统负载高 (load average和us参数的百分比 )JVM内存占用高
jstat -gc pid 查看JVM内存回收情况 发现每5000ms一次full gc
用jstack可以看到应用线程全部挂起,等待GC后执行
jmap -histo pid查看进程中对象情况,每个对象有多少实例,占用多少内存。
jmap -dump:format=b,file= jvm内存具体情况
用MemoryAnalyer查看大对象
解决:
GC常优化参数:
堆大小
永久代大小
GC线程数