博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM内存异常与常用内存参数设置总结
阅读量:6003 次
发布时间:2019-06-20

本文共 1579 字,大约阅读时间需要 5 分钟。

Java Web程序由于引入大量第三方java类库,在启动时经常会遇到内存溢出(Memory Overflow)或者内存泄漏(Memory leak)问题,导致程序启动失败。

一、OOM异常分类:

OOM异常主要分为java堆溢出、虚拟机栈和本地方法栈溢出、方法区和运行时常量池溢出、本地直接内存溢出。

1、 java堆溢出

java堆用于存储对象实例,只要不断的创建实例,并且GC来不及清除这些对象,那么在对象数量达到最大堆的容量后就会产生内存溢出异常。当java堆异常出现时异常栈信息“java.lang.OutofMemory”并且后边一般会有“javaheap space”提示。

2、虚拟机栈和本地方法栈溢出

如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。

如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。

3、方法区和运行时常量池溢出

由于运行时常量池是方法区的一部分,运行时常量池溢出,在OutOfMemoryError后面跟随的提示信息是“PermGen space”,说明运行时常量池属于方法区(HotSpot虚拟机中的永久代)的一部分由于常量池分配在方法区内,我们可以通过-XX:PermSize和-XX:MaxPermSize限制方法区的大小,从而间接限制其中常量池的容量。

4、直接内存溢出

DirectMemory容量可通过-XX:MaxDirectMemorySize指定,如果不指定,则默认与Java堆的最大值(-Xmx指定)一样

二、常见内存设置参数含义

1: heap size 

a:-Xmx<n> 
指定 jvm 的最大 heap 大小 , 如 :-Xmx=2g 
b:-Xms<n> 
指定 jvm 的最小 heap 大小 , 如 :-Xms=2g , 高并发应用, 建议和-Xmx一样, 防止因为内存收缩/突然增大带来的性能影响。 
c:-Xmn<n> 
指定 jvm 中 New Generation 的大小 , 如 :-Xmn256m。 这个参数很影响性能, 如果你的程序需要比较多的临时内存, 建议设置到512M, 如果用的少, 尽量降低这个数值, 一般来说128/256足以使用了。 
d:-XX:PermSize=<n> 
指定 jvm 中 Perm Generation 的最小值 , 如 :-XX:PermSize=32m。 这个参数需要看你的实际情况,。 可以通过jmap 命令看看到底需要多少。 
e:-XX:MaxPermSize=<n> 
指定 Perm Generation 的最大值 , 如 :-XX:MaxPermSize=64m 
f:-Xss<n> 

指定线程桟大小 , 如 :-Xss128k, 一般来说,webx框架下的应用需要256K。 如果你的程序有大规模的递归行为,请考虑设置到512K/1M。 这个需要全面的测试才能知道。 不过,256K已经很大了。 这个参数对性能的影响比较大的。 

三、Tomcat内存设置

1.1、

Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置:

  JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'

  需要把这个两个参数值调大。例如:

  JAVA_OPTS='-Xms256m -Xmx512m'

  表示初始化内存为256MB,可以使用的最大内存为512MB。

1.2、环境变量中设     变量名:JAVA_OPTS     变量值:-Xms512m   -Xmx512m

 

转载于:https://www.cnblogs.com/jokinwu/p/9080177.html

你可能感兴趣的文章
从零开始的微信支付接入(一)用户认证
查看>>
linux何检查一个目录是否为空目录
查看>>
压缩介绍、bz2、gz、xz压缩工具
查看>>
StretchRect...果然和文档上说的一样
查看>>
Python成生随机KEY工具
查看>>
将一个数组拆分为几个至少三个元素的递增子序列
查看>>
备忘,解决WIN10下COM注册问题
查看>>
SAP移动解决方案在零售行业的应用方案及案例分享
查看>>
cx_Oracle install
查看>>
jquery ajax从后台获取数据
查看>>
基于Windows平台TSM 6.x版本下,如何删除初始化失败的实例。
查看>>
Start Code School Today!
查看>>
Nginx下载服务生产服务器调优
查看>>
RHEL6.5_KVM_VLAN_SET
查看>>
Windows下GCC编译环境中文乱码解决方案
查看>>
linux cut
查看>>
Linux 下JDK 安装
查看>>
DNS详解之重新认识DNS一
查看>>
VC中绘图练习(第三方库)
查看>>
MySql增加用户、授权、修改密码等语句
查看>>