LinuxQ?br style="line-height: 24px; " />?usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh
dQJAVA_OPTS=''-Xms512m -Xmx1024m''
要加“m”说明是MBQ否则就是KB了,在启动tomcat时会报内存不?br style="line-height: 24px; " />-XmsQ初始?br style="line-height: 24px; " />-XmxQ最大?br style="line-height: 24px; " />-XmnQ最?br style="line-height: 24px; " />Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m
如果用startup.bat启动tomcat,OK讄生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系l服务启动tomcat服务,上面的设|就不生效了,
是说set JAVA_OPTS=-Xms128m -Xmx350m 没v作用.上面分配200M内存OOM?.
windows服务执行的是bin\tomcat.exe.他读取注册表中的?而不是catalina.bat的设|?
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原gؓ
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms300m -Xmx350m
重vtomcat服务,讄生效
文章出处Q飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/2008215/99782.html
主要包括避免d@环,应该及时释放U资源:内存, 数据库的各种q接Q防止一ơ蝲入太多的数据。导致java.lang.OutOfMemoryError的根本原因是E序不健壮。因此,从根本上解决Java内存溢出的唯一Ҏ是修改E序Q及时地释放没用的对象,释放内存I间?nbsp;遇到该错误的时候要仔细查程序,嘿嘿Q遇多一ơ这U问题之后,以后写程序就会小心多了?/p>
3Q对resin容器Q同样可以在启动时对jvm讄内存限度。在bin文g夹下创徏一个startup.bat文gQ内容如下: 2. 优化E序Q释攑֞圾?/p> 一ơ是用hibernate查询数据Ӟ一ơ查询过多的数据Q例?0000条,此时E序出错Q该ȝjava.lang.OutMemoryErrorQ后来调整了该部分的代码Q每ơ只取出指定量的数据Q成功的解决该问题?/p>
q有一ơ是当测试h员loadRunner做压力测试时Qƈ?00个用hQ运行不到几分钟整个weblogic都瘫掉,真够狠的Q又是java.lang.OutOfMemoryError, PM叫我查同事写的代码,折腾了我好久Q结果发现原来是׃session的资源一直没有被释放产生的,真把俺给气死Q!Q在该工E中在web.xml文g中设|了一个session的侦听期Q当到session时Ӟq入指定的类q行相应处理Q而该同事在进行了自定义的处理后,没有通过session的invalidate()Ҏsession的资源释放,D当大扚wq发Ӟ造成内存溢出?/p>
解决java.lang.OutOfMemoryError的方法有如下几种Q?/p>
1Q在执行某个class文g时候,可以使用java -Xmx256M aa.class来设|运行aa.class时jvm所允许占用的最大内存ؓ256M?br style="line-height: 25px" /> 2Q对tomcat容器Q可以在启动时对jvm讄内存限度。对tomcatQ可以在catalina.bat中添加: 1、PermGen space的全U是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决Ҏ也一定是加大内存。说说ؓ什么会内存益出Q这一部分用于存放Class和Meta的信?Class在被 Load的时候被攑օPermGen space区域Q它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主E序q行期对PermGen spaceq行清理Q所以如果你的APP会LOAD很多CLASS的话,很可能出现PermGen space错误。这U错误常见在web服务器对JSPq行pre compile的时候?/p>ҎҎQ?Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 2、在tomcat中redeploy时出现outofmemory的错? 可以有以下几个方面的原因: Q?使用?u style="line-height: 25px">proxool,因ؓproxool内部包含了一个老版本的cglib. 2, log4j,最好不?只用common-logging 3, 老版本的cglib,快点更新到最新版?/font> Q,更新到最新的hibernate3.2 PermGen space的全U是Permanent Generation space,是指内存的永久保存区? 修改TOMCAT_HOME/bin/catalina.sh 二、java.lang.OutOfMemoryError: Java heap space 三、实例,以下l出1G内存环境下java jvm 的参数设|参考: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true " 均用tomcat作ؓWEB服务器,每天讉K量百万多Qtomcat仍然q行良好。徏议大家有问题多从自己E序入手Q多看看java的DOC文档 JNI完全手册 - JNI调用固有Ҏ - java.lang.OutOfMemoryErrorq个错误我相信大部分开发h员都有遇到过Q生该错误的原因大都出于以下原因:JVM内存q小、程序不严密Q生了q多的垃圾?/p>
在一q多的工作过E中Q遇到该问题的印象最深有两次?/p>
@echo off
call "httpd.exe" "-Xms128M" "-Xmx256M"
:end
其中"-Xms128M"为最内存,"-Xmx256M"为最大内存?/p>
"set CATALINA_OPTS=-Xms128M -Xmx256M
set JAVA_OPTS=-Xms128M -Xmx256M",或者把%CATALINA_OPTS%?JAVA_OPTS%代替?Xms128M -Xmx256M
q里以tomcat环境ZQ其它WEB服务器如jboss,weblogic{是同一个道理?br style="line-height: 25px" />一、java.lang.OutOfMemoryError: PermGen space
q块内存主要是被JVM存放Class和Meta信息?Class在被Loader时就会被攑ֈPermGen space?
它和存放cd?Instance)的Heap区域不同,GC(Garbage Collection)不会在主E序q行期对
PermGen spaceq行清理Q所以如果你的应用中有很多CLASS的话,很可能出现PermGen space错误,
q种错误常见在web服务器对JSPq行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大?br style="line-height: 25px" />过了jvm默认的大?4M)那么׃产生此错误信息了?br style="line-height: 25px" />解决ҎQ?手动讄MaxPermSize大小
?#8220;echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
Q将相同的第三方jar文gUȝ到tomcat/shared/lib目录下,q样可以辑ֈ减少jar 文档重复占用内存的目的?/p>
Heap size 讄
JVM堆的讄是指javaE序q行q程中JVM可以调配使用的内存空间的讄.JVM在启动的时候会自动讄Heap size的|
其初始空??Xms)是物理内存的1/64Q最大空?-Xmx)是物理内存的1/4。可以利用JVM提供?Xmn -Xms -Xmx{选项?br style="line-height: 25px" />q行讄。Heap size 的大是Young Generation 和Tenured Generaion 之和?br style="line-height: 25px" />提示Q在JVM中如?8Q的旉是用于GC且可用的Heap size 不2Q的时候将抛出此异怿息?br style="line-height: 25px" />提示QHeap Size 最大不要超q可用物理内存的80Q,一般的要将-Xms?Xmx选项讄为相同,?Xmn?/4?Xmx倹{?span class="Apple-converted-space">
解决ҎQ手动设|Heap size
修改TOMCAT_HOME/bin/catalina.sh
?#8220;echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
三、相兌?/p>
q详l了解JVM的知识。这样开发的E序才会健壮?br style="line-height: 25px" />
延阅读Q?/span>
JVM 性能调整的一些基本概?/a>
apache+Tomcat负蝲q讄详解[转]
java - the Java application launcher
JVM调优[转]
Java如何通过VC调用VB~写的COM -
Z解决tomcat在大q行大ƈ发请求时Q出现内存溢出的问题Q请修改tomcat的内存大,其中分ؓ以下两种方式Q?/p>
一、?catalina.bat {命令行方式q行?tomcat
查看pȝ最大支持内存命令:java -Xmx1024m -version
1、修?tomcat\bin\Catalina.bat 文g
windows环境下:
?66行左?br style="line-height: 24px; " />rem Execute Java with the applicable properties ”以下每行
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACT
?%DEBUG_OPTS% 后面d-Xms256m -Xmx512m
linux环境下:
打开在Tomcat的安装目录的bin文g的catalina.sh文g,q入~辑状?
在注释后面加上如下脚?
JAVA_OPTS='-Xms512m -Xmx1024m'
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"
其中 JAVA_OPTS='-Xms512m -Xmx1024m' 是设|Tomcat使用的内存的大小.
-XX:PermSize=64M -XX:MaxPermSize=256m 指定cȝ?用于加蝲c?的内存大?nbsp;
保存后,重新以命令行的方式运?tomcat Q即可,然后通过最后面介绍的如何观察tomcat现有内存情况的方法进行查看是否已l变更成功?/p>
二、?pȝ中的 “服务”Q或者开始菜单的可执行程序运行的tomcat
1、关?现在正在q行的tomcat
2.1 [注意]
[高版本tomcat配置Ҏ]
如果是tomcat 5.5 或者是 5.0.28 之后的版本,?Java 选项卡中Q下方,会有
Inital memory Pool:
Maximum memory Pool:
Thread stack size:
三个输入框,在这里即可不用做上面的操作,直接配置内存大小Q只需要设|?br style="line-height: 24px; " />Inital memory Pool ?256
Maximum memory Pool ?512
点击定后,重启tomcat 生效
如果您是低版本的tomcatQ发现没有上面那几个录入框,L下面的操作步?/p>
[低版本tomcat配置Ҏ]
在开始菜单中Q找?#8220;Apache Tomcat 5.0”,q择“Configure Tomcat”Q在弹出的对话框H口中,切换?Java VM 选项卡,q在 Java Options 输入框的最前面输入
-Xms256m -Xmx512m
卌入框中的内容会像下面的代码(与自q环境有所区别Q?/p>
-Xms256m -Xmx512m
-Dcatalina.home="C:\tomcat5"
-Djava.endorsed.dirs="C:\tomcat5\common\endorsed"
-Xrs
讄完后Q点?#8220;定”Qƈ重启tomcat卛_?/p>
三、查看现有tomcat的内存大情?/p>
1、启动tomcat
2、访?http://localhost:8080/manager/status ,q输入您在安装tomcat时输入的用户与口令,?admin Q密?adminQ密码是您在tomcat安装时输入的Q?/p>
注:d用户Q修改conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="admin" password="admin" roles="admin,manager"/>
</tomcat-users>
3、进入了Server Status面Q可以在JVM表格中看?nbsp;
Free memory: 241.80 MB Total memory: 254.06 MB Max memory: 508.06 MB
上面的文字即代表了,当前I闲内存、当前d存、最大可使用内存三个数据?br style="line-height: 24px; " />定了最大内存够大Ӟtomcat卛_正常q{
在ie下面Q设|了不设|window.status的时候,默认昄的是完成Q碰到超链接以后Q显C的是超链接Q然后移除后Q显C的是空白,如果指定了window.status之后Q在I白的地ҎC的是设|的|而且永远保持q个倹{?/p>
如果讄了defaultStatus属性后Q那么只要把鼠标攑ֈI白的地方,昄的都是defaultStatus的|即讄window.status也只是昙׃玎ͼCI白的地ҎC的q是window.defautStatus的?
firefox下面Q本w不能用window.status和window.defaultStatusQ只有在about:config中将dom.disable_window_status_change讄为false之后Q才能ɘq两个值生效,
但是firefox上面Q本w默认的完成两个字不会被链接清掉,然后window.status和window.defaultStatus的效果是一LQ只要指定了q两个|那么
鼠标在空白的地方的时候,状态栏上显C的是讄的|M一个都会把宁外的一个覆盖掉。这是与ie上的不同
首先Q我们要在页面的最上方引用Q?/span>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
下面?/span>JSTL中自带的Ҏ列表以及其描q?/span> Q?/span>
fn:contains(string, substring)
假如参数string中包含参?/span>substringQ返?/span>true
例如Q?/span><c:if test="${fn:contains(name, searchString)}">
fn:containsIgnoreCase(string, substring)
假如参数string中包含参?/span>substringQ忽略大写Q,q回true
例如Q?/span><c:if test="${fn:containsIgnoreCase(name, searchString)}">
fn:endsWith(string, suffix)
假如参数 string 以参?/span>suffixl尾Q返?/span>true
例如Q?/span><c:if test="${fn:endsWith(filename, ".txt")}">
fn:escapeXml(string)
有非凡意义?/span>XML (?/span>HTML)转换为对应的XML character entity co
例如Q?/span> <字符应该转ؓ< ${fn:escapeXml(param:info)}
fn:indexOf(string, substring)
q回参数substring在参?/span>string中第一ơ出现的位置
${fn:indexOf(name, "-")}
fn:join(array, separator)
一个给定的数组array用给定的间隔W?/span>separator串在一Pl成一个新的字W串q返回?/span>
${fn:join(array, ";")}
fn:length(item)
q回参数item中包含元素的数量。参?/span>Itemcd是数l?/span>collection或?/span>String。假如是Stringcd,q回值是String中的字符数?/span>
${fn:length(shoppingCart.products)}
fn:replace(string, before, after)
q回一?/span>String对象。用参数after字符串替换参?/span>string中所有出现参?/span>before字符串的地方Qƈq回替换后的l果
${fn:replace(text, "-", "")}
fn:split(string, separator)
q回一个数l,以参?/span>separator 为分割符分割参数stringQ分割后的每一部分是数组的一个元?/span>
${fn:split(customerNames, ";")}
fn:startsWith(string, prefix)
假如参数string以参?/span>prefix开_q回true
<c:if test="${fn:startsWith(product.id, "100-")}">
fn:substring(string, begin, end)
q回参数string部分字符?/span>, 从参?/span>begin开始到参数end位置Q包?/span>end位置的字W?/span>
${fn:substring(zip, 6, -1)}
fn:substringAfter(string, substring)
q回参数substring在参?/span>string中后面的那一部分字符?/span>
${fn:substringAfter(zip, "-")}
fn:substringBefore(string, substring)
q回参数substring在参?/span>string中前面的那一部分字符?/span>
${fn:substringBefore(zip, "-")}
fn:toLowerCase(string)
参?/span>string所有的字符变ؓ写Qƈ其q回
${fn.toLowerCase(product.name)}
fn:toUpperCase(string)
参?/span>string所有的字符变ؓ大写Qƈ其q回
${fn.UpperCase(product.name)}
fn:trim(string)
去除参数string 首尾的空|q将其返?/span>
${fn.trim(name)}
下面是一个在面昄时超q?00个字W以后用......代替的方法:
<c:set var="testStr" value="${analyze.command}" />
<c:choose>
<c:when test="${fn:length(testStr) > 100}">
<c:out value="${fn:substring(testStr, 0, 100)}" /> ......
</c:when>
<c:otherwise>
<c:out value="${testStr}" />
</c:otherwise>
</c:choose>