JVM常见参数,性能调优,内存溢出问题分析排查

jvm

jvm日志捕获

被动捕捉异常日志:nohup  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=路径地址/heapdump.hprof  -jar XXX.jar &

主动捕捉异常日志:jmap -dump:format=b,file=路径/heapdump.hprof  查到的PID

内存溢出问题分析

  1. 演示栈内存溢出 报错信息:java.lang.StackOverflowError

* 可以通过设置 JVM 参数来设置栈内存,如:-Xss256k

  1. 演示堆内存溢出 java.lang.OutOfMemoryError: Java heap space

* 可以通过配置JVM参数:-Xmx8m 来设置最大堆内存

  1. 元空间内存溢出 java.lang.OutOfMemoryError: Metaspace

* 设置元空间大小:-XX:MaxMetaspaceSize=8m

  1. * 永久代内存溢出 java.lang.OutOfMemoryError: PermGen space

* 设置永久代内存大小:-XX:MaxPermSize=8m

当使用 jdk1.8 及之后的版本时,内存溢出报错提示:java.lang.OutOfMemoryError: Metaspace。当使用 jdk1.8 之前的版本时,内存溢出报错提示:java.lang.OutOfMemoryError: PermGen space

(默认的元空间内存大小为操作系统的内存大小,可能没那么容易产生内存溢出,可以通过设置 jvm 参数限制元空间内存大小来演示内存溢出现象)

常用参数配置

堆设置:

  • -Xms:初始堆空间大小。示例 -Xmx64m
  • -Xmx:最大堆空间大小。示例 -Xmx64m
  • -Xmn:新生代大小。示例 -Xmx32m
  • -XX:NewRatio:设置新生代和老年代的比值。如:为3,表示年轻代与老年代比值为1:3
  • -XX:SurvivorRatio:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如值为3,表示Eden : Survivor=3 : 2,一个Survivor区占整个新生代的1/5
  • -XX:MaxTenuringThreshold:晋升阈值,设置转入老年代的存活次数。如果是0,则直接跳过新生代进入老年代
  • -XX:PermSize-XX:MaxPermSize:分别设置永久代最小大小与最大大小(Java8以前)
  • -XX:MetaspaceSize、-XX:MaxMetaspaceSize:分别设置元空间最小大小与最大大小(Java8以后)

垃圾回收统计信息:

  • -XX:+PrintGC:
  • -verbose:gc:输出虚拟机GC详情
  • -XX:+PrintGCDetails:打印GC详情
  • -XX:+PrintGCDetails -verbose:gc:GC详情
  • -XX:+PrintGCTimeStamps
  • -Xloggc:filename
  • -XX:+ScavengeBeforeFullGC:FullGC 前进行 MinorGC
  • -Xss:设置每个线程可使用的内存大小,即栈的大小。示例 -Xss512k
  • -XX:+HeapDumpOnOutOfMemoryError:当抛出oom时进行heapdump
  • -XX:+HeapDumpPath:指定 heapdump 文件的路径和目录

最常见的几个参数如下:

  •  -Xms20m :设置jvm初始化堆大小为20m,一般与-Xmx相同避免垃圾回收完成后jvm重新分。
  •  -Xmx20m:设置jvm最大可用内存大小为20m。
  •  -Xmn10m:设置新生代大小为20m。
  •  -Xss128k:设置每个线程的栈大小为128k。

jvm学习参考:https://www.cnblogs.com/wenxuehai/p/16577890.html#autoid-h2-5-2-0

JAVA内存分析相关工具参考:https://www.cnblogs.com/wenxuehai/p/16600216.html

 觉得写的还可以的朋友,请点点赞,非常感谢!

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值