第1章 JAVA内存溢出详解
常见的Java内存溢出有以下三种
1.1 java.lang.OutOfMemoryError: Java heap space
JVM Heap(堆)溢出
JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。
可以利用JVM提供的-Xmn -Xms -Xmx等选项进行设置。Heap的大小是Young Generation 和Tenured Generaion 之和。
在JVM中如果98%的时间是用于GC,且可用的Heap size 不足2%的时候将抛出此异常信息。
解决方法:手动设置JVM Heap(堆)的大小。
1.2 java.lang.OutOfMemoryError: PermGen space
PermGen space溢出。
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。
为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen space溢出。
解决方法: 手动设置MaxPermSize大小
1.3 java.lang.StackOverflowError
栈溢出
栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。函数的调用过程都体现在堆栈和退栈上了。
调用构造函数的 “层”太多了,以致于把栈区溢出了。
通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间。通常栈的大小是1-2MB的。
通常递归也不要递归的层次过多,很容易溢出。
解决方法:修改程序。
第2章 解决方法
2.1 参数示例说明
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m –Xmx768m'
表示初始化内存为256MB,可以使用的最大内存为768MB。
【可以使用的最大内存】:建议设为物理内存的50%~80%。不可超过物理内存。
建议把内存的最高值跟最低值的差值缩小,不然会浪费很多内存的,最低值加大,最高值可以随便设,但是要根据实际的物理内存,如果内存设置太大了,比如设置了758M最大内存,但如果没有768M可用内存,Tomcat就不能启动,还有可能存在内存被系统回收,终止进程的情况。
或者将Xms和Xmx两个值设置大小为一样的,这样可以避免在程序运行完毕内存GC时还需要重新调整内存,提高效率。
以下为XXX正式服务器中设置的内存值大小,供类似生产设备设置参考
Windows Server 2003,内存8G
2.2 在Linux环境下的Tomcat(免安装版本)
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms256m –Xmx768m -XX:PermSize=256M -XX:MaxPermSize=768m"
$JAVA_OPTS是保留先前设置。
2.3 在Windows环境下的Tomcat(免安装版本)
64位机器:
如果已经注册到windows服务,并且服务名称非tomcat6,需要进行移除服务,重新命名
进入apache-tomcat-6.0.29/bin目录,双击tomcat6w.exe ,按红色标注位置进行设置
-XX:PermSize=256M
-XX:MaxPermSize=768M
32位机器
如果Tomcat 已经注册成了windows服务,以服务方式启动的:
修改注册表中的JvmMs和JvmMx键值。
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\....\Parameters\Java,
右侧的JvmMs和JvmMx(十进制参考值JvmMs:256,JvmMx:768)
2.4 安装版
前几种方法针对的是bin目录下有catalina.bat的情况(比如直接解压的Tomcat等),但是有些安装版的Tomcat下没有catalina.bat,这个时候可以采用如下方法,当然这个方法也是最通用的方法:
打开Tomcat配置,点击Java选项卡,然后将会发现其中有这么两项:Initial memory pool和Maximum memory pool.
Initial memory pool这个就是初始化设置的内存的大小。
Maximum memorypool这个是最大内存的大小
设置完了就按确定,重启服务。
第3章 如何查看内存设置是否生效
3.1 新增tomcat用户
打开tomcat-user.xml文件,增加如下内容
<role rolename="manager"/>
<user username="tomcat" password="123" roles="manager"/>
如图所示:
3.2 查看内存设置是否生效
进入http://localhost:8080/manager/status
用户名:tomcat 密码:123
测试机器,设置的初始化内存为88M,最大内存为188M,设置完成之后,可以看到如下近似数:
(供参考:本机使用apache-tomcat-6.0.29进行测试,如果服务未能install进windows服务,则无法使用用户名、密码登陆,尚未测试出原因)
- 大小: 9.2 KB
- 大小: 45.5 KB
- 大小: 15.1 KB
- 大小: 47.9 KB
- 大小: 59.3 KB
- 大小: 33.5 KB
- 大小: 26.4 KB
- 大小: 9.7 KB
- 大小: 83.1 KB
分享到:
相关推荐
### Tomcat内存设置详解 #### 引言 在构建高性能且稳定的Web应用时,合理配置Tomcat内存参数是至关重要的一步。Tomcat作为一款广泛使用的开源应用服务器,其性能受到诸多因素的影响,其中内存配置尤为关键。正确的...
### 修改Tomcat内存大小 在部署Java Web应用时,经常需要根据实际运行需求调整Tomcat服务器的内存配置。本文将详细介绍如何修改Tomcat的内存大小,包括常用的内存参数及其意义,并提供具体的设置方法。 #### 一、...
各种环境下tomcat内存设置 linux 和 windows
tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,轻微时,会使系统性能急剧下降,严重时,将导致系统无法运行,影响系统的稳定性。
修改eclipse中的tomcat内存的大小,以防止内存溢出。-------------------------------------------------------------------------------------------------------------------------------------------------------...
这是一个查看Tomcat内存的文件。放在应用工程中,直接访问就可以。 个人感觉这是一个非常有用的文件。
"TOMCAT内存大小调整" TOMCAT内存大小调整是指在使用Java程序从数据库中查询大量数据或应用服务器(如Tomcat、JBoss、WebLogic)加载jar包时,出现java.lang.OutOfMemoryError异常的解决方法。这种异常主要是由于...
在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。本文就介绍了Tomcat内存溢出的三种情况及解决办法分析
### Tomcat JVM内存设置方法详解 #### 一、前言 Tomcat作为一款广泛使用的Java应用服务器,其性能优化一直是开发者关注的重点之一。而在性能优化的过程中,合理设置JVM(Java Virtual Machine)内存是非常关键的一...
Tomcat内存溢出之解决方法 Tomcat内存溢出是指Tomcat服务器在处理大数据量时出现的内存溢出错误,导致系统崩溃或返回HTTP状态码500的错误页面。本文将详细介绍Tomcat内存溢出之解决方法,包括问题分析、解决方法和...
监控Tomcat内存使用情况是确保应用稳定运行的关键环节。Tomcat作为一款广泛应用的Java Servlet容器,其内存管理直接影响到Web应用程序的性能和响应速度。理解并监控这些内存指标可以帮助我们及时发现并解决潜在的...
### 如何设置Tomcat内存大小 要修改Tomcat的内存参数,主要操作步骤如下: 1. **定位配置文件**:找到Tomcat安装目录下的`bin`目录,其中包含`catalina.sh`(Unix/Linux系统)或`catalina.bat`(Windows系统)脚本...
根据提供的部分内容,我们可以看到Tomcat内存参数的设置涉及到了以下几个方面: 1. **修改Tomcat的启动脚本**:通过编辑`G:\apache-tomcat-6.0.37\bin\catalina.bat`文件,添加`set JAVA_OPTS=-Xms256m -Xmx512m`来...
### Tomcat 6.0 修改启动内存设置及 Java JVM 参数配置详解 #### 一、背景与目的 在部署和运行 Java Web 应用时,合理地配置应用服务器(如 Apache Tomcat)的内存是非常重要的。这不仅可以提升应用程序的性能,还...
对于性能优化,书中有专门章节分析Tomcat的内存管理、线程池设置、连接器配置等,以提升服务器的响应速度和并发处理能力。还会探讨日志系统、垃圾收集和JVM调优等方面的知识,帮助读者在实际生产环境中解决性能问题...