JVM 常用参数设置积累
# 堆的初始值,默认物理内存的1/64
-Xms:
# 堆的最大值,默认物理内存的1/4
-Xmx:
# 年轻代大小「在整个堆内存大小确定的情况下,增大年轻代将会减小年老代,反之亦然。此值关系到JVM垃圾回收,对系统性能影响较大,官方推荐配置为整个堆大小的3/8」
-Xmn:
# 设置年轻代初始值为 1024 M
-XX:NewSize=1024
# 设置年轻代最大值为 1024 M
-XX:MaxNewSize=1024m
# 设置线程栈大小,设置越小,说明一个线程栈里面能分配的栈帧数就越少,但对于 JVM 来讲,能开启的线程数就越多;
-Xss128k
# 方法区大小设置「jdk1.8 之后使用元空间替换了方法区,也使用了其他命令」
-XX:MaxPermSize
# 元空间大小设置
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
# 设置大对象的大小,如果对象超过设置大小会直接进入老年代,不会进入年轻代「只在 Serial 和ParNew两个收集 器下有效」
-XX:PretenureSizeThreshold=1000000
# 设定对象晋升到老年代的年龄阈值「设定能经历 10 次拷贝,对象则晋升至老年代」
-XX:MaxTenuringThreshold=10
# jdk1.8 默认设置了下述参数,设置该参数,就会在每次 minor gc 之前看看老年代的可用内存大小,是否大于之前每一次 minor gc 后进入老年代的对象的平均大小,如果小于则那么就会触发一次 Full gc
-XX:-HandlePromotionFailure
JVM 排查问题命令积累
# 查询实例个数和占用空间大小
jmap -histo pid
# 导出堆内存信息
jmap -dump:format=b,file=test.hprof pid
# 查找死锁,打印出线程的状态
jstack pid
# 查看当前运行 java 应用的扩展参数
jinfo pid
# 查看内存中各个部分的使用情况「eden、survivor、old」
jstat -gc pid
# 堆内存统计
jstat -gccapacity pid
# 新生代内存统计
jstat -gcnewcapacity pid
# 新生代垃圾回收统计
jstat -gcnew pid
# 老年代内存统计
jstat -gcoldcapacity pid
# 老年代垃圾回收统计
jstat -gcold pid
# 元数据空间统计
j