JVM 使用参数

    一般情况下,我们默认安装的JDK在运行一个java程序理想状态下是不会出现OOM等问题的。所以我没必要去配置一些JVM参数。但是当我们遇到OOM等一些性能问题时,配置JVM参数就成了我们制胜的法宝。

    最为大家熟知的想必就是-Xms与-Xmx(-XX:InitialHeadSize/-XX:MaxHeapSize)这俩个设置堆的初始和最大大小的参数。当然我们大多数时候我们为了避免每次垃圾回收之后jvm重新分配内存我们会将这俩个的值设置成一样的。

 eg. java -Xms3g -Xmx3g -Xmn2g -Xss128k -XX:MaxPermSize=256m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=0 -verbose:gc -Xloggc:gc.log

  -Xms3g 设置jvm初始内存为3g

  -Xmx3g 设置jvm最大内存为3g

  -Xmn2g设置年轻代内存为1g

  -Xss128k设置每个线程分配的栈大小为128k

  -XX:MaxPermSize=256m设置永久代最大大小为256m

  -XX:NewRatio=4 设置年轻代(包括Eden区和两个Survivor区)与年老代(除去永久代)的比值。这里设置为4,表示年轻代与年老代的比值为1:4,则年轻代占年轻代和年老代的1/5.

  -XX:SurvivorRatio=4 设置Eden区和Survivor区的比值。这里设置为4.表示Eden区与Survivor区(注意这里有俩个Survivor区)的比为4:2,Survivor区占整个年轻代的1/6.

  -XX:MaxTenuringThreshold=0设置垃圾收集最大年龄。如果设置为0的话,对象在年轻代不经过Survivor区直接进入年老代。如果将这个值设置较大,将会增加对象在年轻代的停留时间,对象将会在Survivor区进行多次复制才能进入老年代。

  -verbose:gc:设置显示垃圾收集信息

  -Xloggc:gc.log:指定垃圾收集日志文件

     堆内存快照:解决各种OOM的良药

    假如我们将-Xmx设置成一个合适的值,那么我们将面对OOM的风险,而如果这个OOM发生在应用运行后几个礼拜才出现,那么就给我调试发现问题带来了不少的难度。幸运的是,如果在发生OOM时我们生成保留了Heap Dump,那么对与我们分析问题就事半功倍了。我们可以设置-XX:+HeapDumpOnOutOfMemoryError让jvm发生内存溢出时自动生成堆内存快照。默认这个对内存快照会保存在JVM启动目录下名为:java_pid<pid>.hprof的文件里(这里的<pid>就是JVM进程的进程号)。当然我们也可以通过设置-XX:HeapDumpPath=<path>来改变默认的堆内存快照存放的路径,这个<path>可以使绝对路径也可以是相对路径。

   -XX:OnOutOfMemoryError当内存发生溢出时我们可以执行一些指令或做一些相应的处理。

eg:java -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/headdump.hprof 

       -XX:OnOutOfMemoryError="sh ~/operate.sh"  HelloWorld

 

   待补充... ...

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值