调整JVM内存设置解决Tomcat内存溢出问题
"设置JVM内存的方法主要涉及Java项目的内存管理,当项目中引入大量第三方包可能导致内存不足。可以通过调整JVM的内存设置来解决这个问题。文档提到了在不同的操作系统和环境下,设置JVM内存的方法有所不同。对于Windows下的Tomcat,可以在`catalina.bat`文件中设置`JAVA_OPTS`;而在Unix/Linux环境下,需要修改`catalina.sh`。对于Tomcat作为系统服务的情况,内存设置可能存储在注册表中。此外,当通过MyEclipse启动Tomcat时,需要在MyEclipse的首选项设置中调整Tomcat的JVM参数。" 在Java应用程序中,内存管理至关重要,尤其是对于服务器端应用如Tomcat这样的Web容器。JVM(Java虚拟机)的内存设置包括堆内存(Heap Memory)的最小值(-Xms)和最大值(-Xmx)。这两个参数分别指定Java进程启动时分配的最小堆内存和程序运行过程中允许的最大堆内存。例如,`-Xms32m -Xmx256m`表示JVM启动时至少分配32MB内存,最多可使用256MB。 在Windows系统中,如果使用的是Tomcat的安装版,内存设置可能不会立即生效,因为Tomcat作为服务运行时,内存配置可能存储在注册表的`HKEY_LOCAL_MACHINE\SOFTWARE\ApacheSoftwareFoundation\TomcatServiceManager\Tomcat5\Parameters\JavaOptions`下。在这种情况下,需要直接修改注册表中的值。 然而,如果使用的是Tomcat的压缩包形式,可以直接在启动脚本`catalina.bat`或`catalina.sh`中设置`JAVA_OPTS`环境变量来改变内存大小。例如,在`catalina.bat`中添加`set JAVA_OPTS=-Xms128m -Xmx256m`。 值得注意的是,当使用集成开发环境(IDE)如MyEclipse启动Tomcat时,IDE的配置可能覆盖了`catalina.bat`中的设置。因此,需要在MyEclipse的首选项中找到相应的Tomcat配置,例如在`窗口 -> 首选项 -> MyEclipse -> 应用服务器 -> Tomcat -> Tomcat5.x -> JDK -> 可选JavaVMarguments`中添加内存设置,如`-Xms128m -Xmx256m`。 此外,JVM内存设置还包括新生代大小(-Xmn)、永久代大小(-XX:MaxPermSize,Java 8及之后版本已取消)、Metaspace大小(-XX:MaxMetaspaceSize)等。这些参数可以根据应用的具体需求和系统的实际硬件资源来调整。 当JVM的垃圾回收(GC)频繁执行且堆内存剩余空间不足时,可能会导致`OutOfMemoryError`。为了避免这种情况,开发者需要合理地预估应用在运行时的内存需求,并根据实际情况调整JVM的内存参数。通常,内存大小的设置应该确保程序在正常运行时不会达到最大堆内存的98%以上,同时保留至少2%的空闲空间以防止频繁的垃圾回收。
/tomcat/bin/catalina.bat 加上下面的命令:
set JAVA_OPTS=-Xms32m -Xmx256m
假如你用unix/linux
/tomcat/bin/catalina.sh 加上下面的命令:
JAVA_OPTS="-Xms32m -Xmx256m"
tomcat分为安装和压缩包形式,安装的情况catalina.bat设定、使用系统服务不会生效,而是存储在注册表中,位置是HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions 修改时视情况而定。
启动MyEclipse启动Tomcat无视catalina.bat中设置内存大小的问题。
在tomcat的catalina.bat中设置set JAVA_OPTS=-Xms128m -Xmx256m,直接使用startup.bat启动tomcat没有问题。但是在myeclipse中配置tomcat后,通过myeclipse启动就出现内存溢出,之前在catalina.bat中设置的内存似乎没有作用。
解决方法:窗口->首选项->MyEcliipse->Application Servers->Tomcat->Tomcat5.x->JDK->Optional Java VM arguments中填写一下内容。
-Xms128m -Xmx256m
-Dcom.sun.management.jmxremote=true
内存具体大小视具体情况制定。
在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的 1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
jvm虚拟机的默认Heap大小是64M,可以通过设置其最大值-Xmx和初始值-Xms来实现.
(1).可以在windows 更改系统环境变量:JAVA_OPTS=-Xms64m -Xmx512m (针对catalina.bat )
(2). 命令行执行的时候:java -Xms64m -Xmx1024m cn.neto.Test
(a).tomcat:在windows下:可以在C:\tomcat5.5.9\bin\catalina.bat 中加上: set JAVA_OPTS=-Xms64m -Xmx256m
位置在 rem Guess CATALINA_HOME if not defined 这行的下面加合适.
在linux下:在{tomcat_home}/bin/catalina.sh的前面,加 set JAVA_OPTS='-Xms64 -Xmx512'
(b).tomcat如果是安装版的,更改tomcat5w.exe中的java选项卡下的initial memory pool 和 maximum memory pool
(c). weblogic: 在startWeblogic.cmd(windows)/startWeblogic.sh(unix/linux)中调节
Java虚拟机默认分配64M内存,如果你的应用比较大,超出64M内 存,Java虚拟机就会抛出outOfMemoryError,并停止运行。不管是什么应用(Web应用、Application等),只需要修改你的机 器上的运行Java命令,在javaxxx命令中添加-Xms(最小使用内存)、-Xmx(最大使用内存)即可解决。当然,这儿的内存容量都是指物理内 存,不能超出你的机器的物理内存的总容量。
对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设 置最大能够使用内存的大小(最好不要超过物理内存大小)
在eclipse中的设置方法
方法1:对应在Eclipse中的设置为:窗口->首选项->JAVA->已安装的JRE,在缺 省的VM自变量中增加: 如-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
方法2:修改eclipse.ini
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
这里有几个问题:
1. 各个参数的含义什么?
2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动,而有些机器无法启动?
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全