tomcat JAVA启动参数 JAVA_OPTS OutOfMemoryError
$TOMCAT_HOME$/CATALINA.BAT第一行,增加
set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx900m -Duser.timezone=GMT+08
=================================================================================================================================
$JONAS_HOME/bin/unix/jonas 中:
export JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128M -DFF_HOME=$JONAS_ROOT/ffhome"'- Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
http://jasli.itpub.net/post/15912/300322
=================================================================================================================================
The JAVA_OPTS environment variable can be used to specify additional arguments to the JVM JBoss will be run in. These can be set as regular environment variables on the platform, in the startup script (run.sh or run.bat, or (when using run.sh) in run.conf.
Some examples:
Memory settings
JAVA_OPTS="-server -Xms128m -Xmx512m"
JDK 1.3.1 JPDA settings
JAVA_OPTS="-classic -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
JDK 1.4.1 JPDA settings
JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
Setting Jetty webserver port
JAVA_OPTS=-Djetty.port=80
-server
-Xms 00m
-Xmx 00m
-Xss 00k
+XX:AggressiveHeap
+XX:AggressiveHeap: 会使得 Xms 1220m没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。 另外Xmx作为允许jvm使用的最大内存数量,不应该超过物理内存的90%。
Xss 00k :这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
1.修改 JAVA_OPTS,去掉+XX:AggressiveHeap,修改Xss。现在的JAVA_OPTS为:
-Xms 520m -Xmx 900m -Xss 128k
2.修改deploy/jbossweb-tomcat55.sar/service.xml
将 maxThreads根据目前的访问量由默认的250降为75,并使用jboss 4默认未写在标准service.xml里面而jboss 3写入了的2个参数: maxSparseThreads=55,minSparseThreads=25
3.修改了oracle-ds.xml 将最大连接数有150降为50.
4.去掉了一些不用的服务。
=================================================================================================================================
Tomcat 的JVM 内存溢出问题的解决? 好久没有遇到这个问题了,最近做的项目有些多,并且同时发布到一个Tomcat下,没多长时间可爱的Tomcat就会被撑死,试着改了几个参数,但是问题 依旧,可能是因为每个项目都是用的ssh架构,初始化内存占用太大,也可能是代码写的有问题,没有释放内存,明天用测试工具测试下。另外这种 WebServer搭建结构很不合理,服务也不健壮;一定要改一改。下班回家路上想将WebServer转移到一台空闲的PC Server上,使用Apache+N个Tomcat实例,将应用分散到几个Tomcat实例下,我想这样情况可能会好很多。
先看下面解 决问题的方法,没有尝试过,但是觉得很合理,明天到单位试一下。
【转】Tomcat 的JVM 内存溢出问题的解决
关 于内存溢出问题转帖,备查。
【转自】http://ahut9923.iteye.com/blog/236859
1、首先是:java.lang.OutOfMemoryError: Java heap space
解释:
Heap size 设置
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置 Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提 示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:
手动设置Heap size
修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
Java代码
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m?
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m
或修改catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
2、其次 是:java.lang.OutOfMemoryError: PermGen space
原因:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法:
1. 手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat(Linux下为 catalina.sh),在Java代码
“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:???
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m?
“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
catalina.sh下为:
Java 代码
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
另外看到了另外一个帖子,觉得挺好,摘抄如 下:
分析java.lang.OutOfMemoryError: PermGen space
发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用 CBLIB会动态产生很多类。
但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?tomcat在 Q&A很隐晦的回答了这一点,我们知道这个问题,但这个问题是由一个更基础的问题产生。
于是有人对更基础的JVM做了检查,发 现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就 固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!
对于以上两个问题,我的处理是:
在catalina.bat的第一行增加:
Java代码
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m?
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
在 catalina.sh的第一行增加:
Java代码
JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
备注: http://www.jbsolutions.net.in/out_of_memory_issue.html
=================================================================================================================================
http://publib.boulder.ibm.com/wasce/V2.1.0/zh_CN/javaopts.html
JAVA_OPTS 环境变量
使用以下命令时,在执行该命令之前,可通过设置 JAVA_OPTS 环境变量将额外的选项传递给 Java 虚拟机。
deploy
geronimo
shutdown
startup
初始堆大小
要指定 Java 虚拟机的初始堆大小,请在启动服务器之前,将下列选项包含在 JAVA_OPTS 环境变量中:
-XmsIm
其中 I 由初始堆大小替换(单位:MB)。
最大堆大小
要指定 Java 虚拟机的最大堆大小,请在服务器启动之前,在 JAVA_OPTS 环境变量中包含以下选项:
-XmxMm
其中 M 由最大堆大小替换(单位:MB)。
以大页面分配堆
要指定以大页面分配堆,请在启动服务器之前,将下列选项包含在 JAVA_OPTS 环境变量中:
-Xlp
指定以大页面分配堆。
启用代理服务器
请考虑服务器由防火墙保护的情 况。服务器可能仍需要访问防火墙以外的站点,例如,使用管理控制台来访存并安装 JDBC 驱动程序。如果必须将服务器配置为使用代理服务器访问外部资源,请在启动服务器之前,将下列选项包含在 JAVA_OPTS 环境变量中:
-DproxySet=true
配置 Java 虚拟机以使用代理服务器。
-DproxyHost=host
其中 host 是运行代理服务器的主机。
-DproxyPort=port
其中 port 是代理服务器侦听的端口。
定 制日志记录
如果希望对服务器中的日志记录进行更精密的控制,那么您可以指定自己的日志记录设置,并在启动服务器之前在 JAVA_OPTS 环境变量中提供单独的 log4j.xml 文件。以下选项将覆盖 \var\log 目录下的 XYZ-log4j.properties 文件中定义的设置。
-Dorg.apache.geronimo.log4jservice.configuration=filename
其中,filename 必须是标准的文件名,它是相对于服务器实例目录位置的。