doc执行:
查看当前java进程的pid:jps / jps -l
查看或者修改jvm参数:jinfo - flag UserG1GC pid
实时修改某个进程中的jvm参数的值:jinfo -flag name=value pid (只有{manageable状态的才可以实时修改})
查看现场堆栈信息:jstack pid 线程出现问题,容易排查,如死锁。
生产堆内存的快照:jmap -heap pid
idea配置:
导出gc日志:-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:gc.log
发生oom时自动dump文件配置:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof
配置堆的大小:-Xms10M -Xmx20M
系统启动时,打印所有的jvm参数配置:-XX:+PrintFlagsFinal
使用gc:-XX:+UseConcMarkSweepGC
设置停顿G1时间:-XX:+UseG1GC -XX:MaxGCPauseMillis=10
启动并发GC时,希望堆内存的占比:(即堆内存使用了多少时,进行并发标记,并发清理,即进行gc): doc设置参数:jinfo -flag InitiatingHeapOccupancyPercent pid
C:\Users\Administrator\Desktop>jinfo -flag InitiatingHeapOccupancyPercent 628
-XX:InitiatingHeapOccupancyPercent=45
工具:
jdk自带的:jconsole
jdk自带的:jvisualvm
解决:
Windos+r输入cmd,打开终端
输入命令: netstat -ano|findstr 8888
发现端口8888被14192进程占用。
输入命令:taskkill -f -pid 11164 杀死进程!!
G1和CMS的区别:
G1:标记-整理,停顿时间可配置,使用新生代,老年代,解决了垃圾碎片
CMS:标记-清除,使用老年代,垃圾碎片