在 CentOS 上排查 Java 日志中的内存溢出(OutOfMemoryError),通常可以按下面步骤来做。
先看日志中是否有类似内容:
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: GC overhead limit exceeded
java.lang.OutOfMemoryError: Metaspace
java.lang.OutOfMemoryError: Unable to create new native thread
不同类型含义不同:
ps -ef | grep java
或
jps -l
top -p <pid>
关注:
jinfo <pid> | grep -i heap
或
ps -ef | grep java
重点看:
-Xms
-Xmx
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
示例:
-Xms512m -Xmx1024m
jmap -dump:format=b,file=/tmp/heap.hprof <pid>
启动参数加:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/tmp/heap.hprof
heap.hprofjhat /tmp/heap.hprof
然后访问:
http://localhost:7000
-Xloggc:/var/log/java/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
free -h
ulimit -u
ps aux --sort=-%mem | head
如果你愿意,可以把:
发出来,我可以帮你具体判断是哪种溢出。