CPU
原因
死循环、频繁GC、频繁切换上下文。
使用jstack来分析线程问题
jps
获取当前进程号;top pid
查看当前进程号的cpu使用率是否过高;- 如果当前进程cpu过载,则可以
- 通过
top -Hp pid
查看当前进程下的所有线程的cpu使用情况; - 获取到当前的线程pid之后需要将10进制专程16进制(
printf"%x" pid
); - 通过
jstack pid
获取当前线程运行情况,并搜索指定线程,查看线程的状态和代码行数;
- 通过
- 通过
jstack
查看是不是由于线程死锁导致的问题; cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c
对整体线程的状态有个把控
GC问题
jstat -gcutil pid
查看ygc、fgc的时间和次数
频繁切换上下文
vmstat
磁盘
磁盘空间不足、io性能
df -h
查看磁盘存储使用情况iostat -d -k -x
查看磁盘性能cat /proc/pid/io
查看具体进程的io情况ls -lah /proc/pid/fd
查看此进程打开的文件lsof -p pid
来看具体的文件io情况
内存
先通过free
命令查看系统内存使用情况;
OOM java heap space
堆内存溢出,检查Xmx
参数,获取dump文件分析 jmap -dump:format=b,file=filename pid
,最好通过``````
OOM: stackOverFlowError unable to create new native thread
jstack
查看线程数量,判断是否需要修改Xss
OOM metaspace
metaspace用于存储类信息、常量池、静态变量和即时编译的代码(如动态代理产生的),而且使用的不是虚拟机内存而是本地内存;
通过XX:MaxMetaspaceSize
设置最大的元数据空间;通过XX:MaxPermSize
设置非堆区分配的最大内存
stackOverFlowError 栈溢出
一般在递归中出现,深度过深