JVM内存调优
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM内存调优相关的知识,希望对你有一定的参考价值。
JVM的常见配置汇总
堆设置:
-Xms:初始堆大小 一般设置为小于4G
-Xmx:最大堆大小 一般设置为小于4G
一般-Xms与Xmx的值相等,避免每次垃圾回收完成后JVM重新分配内存
-XX:NewSize=n 设置年轻代大小
-XX:NewRatio=n 设置年轻代和年老代的比值
如果设置了-XX:NewSize,那么久不在设置-XX:NewRatio
收集器的设置
-XX:+UseParallelGC:设置并行收集器
-XX:+UseConcMarkSweepGX:设置并发收集器
垃圾回收统计信息
-XX:+PrintGC
并行收集器设置:
-XX:ParallelGCThreads=n 根据CPU核数来设置。并行收集线程数
配置举例:
系统的可用武力内存限制:32位系统下,一般限制在1.5G-2G;
64位操作系统对内存无限制,但是一般设置在4G左右
典型设置:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xmn2g:持久代一般固定大小为64m
回收器的选择:
JDK5.0以后,JVM会根据当前系统配置进行判断
使用并发收集器时,开启对年老代的
JVM调优工具:
Jconsole、VisualVM:JDK自带
持久代被占满:
异常:java.lang.OutOfMeoryError:PermGen Space
Perm空间被占满,无法为新的
解决办法:
1.-XX:MaxPermSize=16m
堆栈溢出
异常:java.lang.StackOverflowerror
说明:一般就是递归没返回,或者循环调用造成
线程堆栈满
异常:Fatal:Stack size too small
说明:java中一个线程的空间大小是有限制的。JDK5.0以后这个值是1M。与这个线程相关的数据将会保存其中。但当线程空间满了以后,会出现上面异常
解决:增加线程栈大小。-Xss2m。但是这个配置无法解决根本问题,还要看代码部分是否有造成泄漏的部分
系统内存被占满
异常:java.lang.OutOfMeoryError:unable to create new native thread
说明:这个异常是由于操作系统没有足够的资源来产生这个线程造成的。系统创建线程时,除了要在Java堆中分配内存外,操作系统本身也需要分配资源来创建线程。因此,当线程数量大道一定程度以后,堆中或许还有空间,但是操作系统分配不出资源来了,就出现这个异常了。
通过修改-Xss来减少分配给单个线程的空间,也可以增加系统总共内生产的线程数。
解决:
1.重新设计系统减少线程数量
2.通过-Xss改变大小
常用命令:
jmap head
jmap -permstat
jmap -dump
本文出自 “linux学习总结” 博客,请务必保留此出处http://myybaby.blog.51cto.com/1555499/1952719
以上是关于JVM内存调优的主要内容,如果未能解决你的问题,请参考以下文章