查看哪个线程占用最多资源:
找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid 命令查看这个进程下面的所有线程占用情况。
找出该进程 ps -ef | grep java
找出该进程内最耗费内存的线程 :top -H -p pid
PS:ps -eLf 查看所有所有进程的所有线程
监控java线程数:
ps -eLf | grep java | wc -l
jstack [-l] pid
jstack 8545 > stack.log
jstack [进程]|grep -A 10 [线程的16进制]
即: jstack 21125|grep -A 10 52f1
-A 10表示查找到所在行的后10行。21233用计算器转换为16进制52f1,注意字母是小写。
jstack -m 会打印出JVM堆栈信息,涉及C、C++部分代码,可能需要配合gdb命令来分析。
频繁GC问题或内存溢出问题
一、使用jps
查看线程ID
二、使用jstat -gc 3331 25 20
查看gc情况,一般比较关注PERM区的情况,查看GC的增长情况。
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
三、使用jstat -gccause
:额外输出上次GC原因
四、使用jmap -dump:format=b,file=heapDump 3331
生成堆转储文件
五、使用jhat或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。
六、结合代码解决内存溢出或泄露问题。