JVM常规配置概述
堆设置:
-Xms :初始堆大小通常设置为小于4G
-Xmx :最大堆大小通常设置为小于4G
通常-Xms和Xmx的值相同,以防止每次垃圾回收完成时JVM重新分配内存
-XX:NewSize=n设置年轻一代的大小
-XX:NewRatio=n设置年轻一代与老一代的比率
如果设置了-XX:NewSize,则很久没有设置-XX:NewRatio
收集器设置
- xx :用户并行lelgc :并行收集器设置
-XX: UseConcMarkSweepGX :设置并发收集器
垃圾回收统计信息
- xx :打印GC
并行收集器设置:
-XX:ParallelGCThreads=n是根据CPU内核数设置的。 并行收集线程数
配置示例:
系统可用武力内存限制: 32位系统通常限制为1.5G-2G;
64位操作系统对存储器没有限制,但一般设定为4G左右
标准设置:
jva-xmx 3550 m-xms 3550 m-xmn2g-xs 128 k
-Xmn2g :永久世代的一般固定大小为64m
回收器的选择:
从JDK5.0开始,JVM将根据当前的系统配置进行确定
如果同时使用收集器,则为老一代的
JVM调整工具:
Jconsole、visual VM :附带JDK
持久的一代占:
异常: Java.lang.outofmeoryerror : permgenspace
Perm空间已满,新的
解决方案:
1.-XX:MaxPermSize=16m
堆栈溢出
异常: java.lang.StackOverflowerror
说明:一般是递归回不来或循环调用引起的
线程堆栈已满
异常: fatal :堆叠大小至小型
说明: java线程的空间大小有限制。 JDK5.0或更高版本的值为1M。 与此线程相关的数据将被保存。 但是,当线程空间已满时,就会发生上述异常
解决方案:增加线程堆栈大小。 -Xss2m。 但是,此配置不能解决根本问题,还必须检查代码部分是否存在导致泄漏的部分
系统内存已满
异常: Java.lang.outofmeoryerror 3360 unabletocreatenewnativethread
说明:发生此异常是因为操作系统没有足够的资源来生成此线程。 当系统创建线程时,除了为Java堆分配内存外,操作系统本身也必须分配用于创建线程的资源。 因此,如果线程数增加到一定程度,堆可能还有空间,但如果操作系统无法分配资源,则会发生此异常。
也可以通过修改-Xss以减少分配给单个线程的空间,来增加整个系统生产的线程数。
解决:
1 .重新设计系统以减少线程数量
-用XSS调整大小
常用命令:
jmap头
jmap -permstat
jmap -dump