1. JVM内存Old使用率过高排查
查看服务的进程ID
ps -ef|grep trade-core ## 结果 app 17530 1 8 May01 ? 07:42:45
查看占用CPU或内存最多的线程,获取线程ID
top -Hp 17530
把线程ID转化为十六进制
printf '%x/n' 23312
查看JVM内存堆栈信息
jstack 17530 | grep 5b10 -A 30
生成Java虚拟机的堆转储快照
jmap -dump:format=b,file=trade-core-162.dump 17530
GClog日志
‐XX:+PrintGCDetails ‐XX:+PrintGCDateStamps ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCCause ‐XX:+UseGCLogFileRotation ‐XX:NumberOfGCLogFiles=10 ‐XX:GCLogFileSize=100M ‐Xloggc:./gc-`date +"%Y%m%d_%H%M%S"`.log
2. JVM信息查看
查看本地正在运行的java进程和进程ID
jps -lV
查看指定pid的所有JVM信息
jinfo 26337
查询虚拟机运行参数信息
jinfo -flags 26337 ## 结果示例 Attaching to process ID 26337, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.211-b12 Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=1585446912 -XX:MaxHeapSize=1585446912 -XX:MaxNewSize=134217728 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=134217728 -XX:OldSize=1451229184 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC Command line: -Djava.util.logging.config.file=/app/tomcat/trade-core-8080/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxNewSize=256M -Djdk.tls.ephemeralDHKeySize=2048 -Ddubbo.application.logger=slf4j -Ddubbo.service.shutdown.wait=30000 -Dlog4j2.formatMsgNoLookups=true -Xms1512m -Xmx1512m -XX:PermSize=256M -XX:MaxPermSize=256M -XX:MaxNewSize=128M