论坛首页 Java企业应用论坛

解决tomcat服务器出现“Out Of Memory”的问题!

浏览 14490 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (18) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-08-26  
期待JDK7推出的G1收集器.
0 请登录后投票
   发表时间:2011-08-27  
oom是很正常的事情,tomcat默认最大内存是128,稍大一点的系统很容易就超了。

另外,catalina.bat一般是不改的。
如果是运行环境,自己写一个脚本好了。
如果是开发环境,运行参数就可以设置JVM的参数,eclipse在Run Dialog里面。

顺便分享个脚本给大家,不要照抄哦,启动就占1G:
export JAVA_HOME=/app/jdk1.6.0_24/
export CATALINA_HOME=/app/tomcat-8080

export JAVA_OPTS=' -server -Xms1024m -Xmx1536m -XX:MaxNewSize=256m -XX:PermSize=128M -XX:MaxPermSize=256m -Djava.awt.headless=true '

case "$1" in
start)
echo "Starting Tomcat ... " 
$CATALINA_HOME/bin/startup.sh
echo "Done." 
echo ""
echo "-------------------------------------------------"
date +" %T %a %D : Finished."
echo "-------------------------------------------------"
tail -f $CATALINA_HOME/logs/catalina.out

;;
stop)
echo "Stopping Tomcat ... " 
$CATALINA_HOME/bin/shutdown.sh
echo "Done."
echo ""
echo "-------------------------------------------------"
date +" %T %a %D : Finished."
echo "-------------------------------------------------"


;;
*)
echo "Usage: $0 {start|stop|restart}" 
exit 1
esac

0 请登录后投票
   发表时间:2011-08-27  
你这种情况只是说请求的内存太多了,而配置的内存太小导致的内存溢出,如果因为自己的tomcat配置的内存太小,这种解决方法可以解决。但如果是由于自己程序产生的bug,那么再怎么调整启动内存也是没有用的。另外并不是说内存调的越大越好,要合理分配。
0 请登录后投票
   发表时间:2011-08-27  
lnaigg 写道
oom是很正常的事情,tomcat默认最大内存是128,稍大一点的系统很容易就超了。

另外,catalina.bat一般是不改的。
如果是运行环境,自己写一个脚本好了。
如果是开发环境,运行参数就可以设置JVM的参数,eclipse在Run Dialog里面。

顺便分享个脚本给大家,不要照抄哦,启动就占1G:
export JAVA_HOME=/app/jdk1.6.0_24/
export CATALINA_HOME=/app/tomcat-8080

export JAVA_OPTS=' -server -Xms1024m -Xmx1536m -XX:MaxNewSize=256m -XX:PermSize=128M -XX:MaxPermSize=256m -Djava.awt.headless=true '

case "$1" in
start)
echo "Starting Tomcat ... " 
$CATALINA_HOME/bin/startup.sh
echo "Done." 
echo ""
echo "-------------------------------------------------"
date +" %T %a %D : Finished."
echo "-------------------------------------------------"
tail -f $CATALINA_HOME/logs/catalina.out

;;
stop)
echo "Stopping Tomcat ... " 
$CATALINA_HOME/bin/shutdown.sh
echo "Done."
echo ""
echo "-------------------------------------------------"
date +" %T %a %D : Finished."
echo "-------------------------------------------------"


;;
*)
echo "Usage: $0 {start|stop|restart}" 
exit 1
esac



不同意这个观点,tomcat的启动脚本只是给的一个默认值,是他们认为一般情况下可以的一种情况。这要看自己的项目的内存占用情况,如果需要调就一定调脚本,而不是在外面直接写一个壳,那样容易产生误解,配置错误。
0 请登录后投票
   发表时间:2011-08-27  
解决了表面现象——严重猜测楼主的是32位系统难道还是使用的默认64M内存跑应用。
呵呵,我的机器自从使用64位系统未发现过此问题。
0 请登录后投票
   发表时间:2011-08-28  
这个不是解决问题的直接方法。

outofmemory肯定是程序问题。
0 请登录后投票
   发表时间:2011-08-29  
菜菜土人 写道
这个不是解决问题的直接方法。

outofmemory肯定是程序问题。


不一定。也要分情况,如果JVM永久存储区过小,应用可能都起不来就直接PG OOM鸟
0 请登录后投票
   发表时间:2011-08-29  
Out Of Memory 有很多种。调整permsize只是调了其中一个参数。
0 请登录后投票
   发表时间:2011-09-09  
我们是做XML相关产品的,在大文档的XML解析和处理的程序中会碰到out of memory的情况。第一种做法是加大内存。在32位的Windows操作系统上,最大能加到1.5G。但有时候还不够。那么我们第二种方法是用64位的操作系统。现在还没有测出来最大能加到多大内存。第三种方式就是要查看程序,看是否有优化的地方。如果还不能解决,只能够把大的文档拆成小文档,然后一个一个地处理了。这样内存要求少了。但是对程序开发的技巧要求高了。
0 请登录后投票
   发表时间:2011-09-11  
大量数据的数据库,就尽量别用Hibernate了。那东西层次多,为了搭建对象模型,它需要很多内部的对象。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics