tomcat内存溢出问题

a85907468 2008-11-17 09:26:49
我的服务器上部署着4个项目,都是ssh的,
我的配置是: tomcat6.0.14、windows 2003 server、sql server
错误:java.lang.OutOfMemoryError: PermGen space
我在网上找了一些关于这个问题的帖子,都说是修改catalina.bat的文件,吧永久内存分配大些,我的是安装的tomcat,在bin文件夹中没有catalina.bat这个文件,所以也不知道在那里修改,请专家指点。
我看了一篇关于jvm内存的文章,以前也看过一个视频,上面讲的和我看的文章内存分配不一致,后来有看了一些文章,都各有说法,现在对jvm的内存非配有点糊涂了,呵呵,请专家讲解下,还有java.lang.OutOfMemoryError: PermGen space这个错误的解决方法,具体错误如下:
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)


root cause

javax.servlet.ServletException: java.lang.OutOfMemoryError: PermGen space
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:274)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)


root cause

java.lang.OutOfMemoryError: PermGen space

...全文
303 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyh149129 2009-03-03
  • 打赏
  • 举报
回复
以前也碰到过这样的问题,可设置了jvm 内存 也还是没有解决这个问题。
后来用oracle jdk 替换了 sun 的jdk后,这个问题得以解决
a85907468 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 java2000_net 的回复:]
PermGen space 代码区不够

一般来说,你不要频繁更新你的class和配置文件,否则每次更新都会占用(固定静态)代码区

也就是说,你如果更新了程序,应该重启tomcat

OVER, 正式环境,不应该在正常使用的时间,更新程序,应该在凌晨4-5点
[/Quote]

PermGen space 是代码区吗?
我看过一些文章说这个是堆(heap)中的,我不明白到底是什么意思,我还看过一视频那老师说栈是代码区
能解释下这个吗?谢谢
self_at_work 2008-11-18
  • 打赏
  • 举报
回复
-Xmx256m 很可能还是不够的。
1200m 可以考虑。

http://blog.csdn.net/longaway/archive/2006/10/24/1349598.aspx
老紫竹 2008-11-18
  • 打赏
  • 举报
回复
PermGen space 代码区不够

一般来说,你不要频繁更新你的class和配置文件,否则每次更新都会占用(固定静态)代码区

也就是说,你如果更新了程序,应该重启tomcat

OVER, 正式环境,不应该在正常使用的时间,更新程序,应该在凌晨4-5点
a85907468 2008-11-17
  • 打赏
  • 举报
回复
是一篇不错的文章,可是我试验了,说不能创建jvm,不明白其中的道理
hjy273 2008-11-17
  • 打赏
  • 举报
回复
可以参考3楼和4楼方法。
tzb08 2008-11-17
  • 打赏
  • 举报
回复
修改TOMCAT_HOME/bin/catalina.bat,在echo "Using CATALINA_BASE: $CATALINA_BASE"上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m"


如果你用了myelcipse就更简单了,在启动参数中添加:
-Xms128m
-Xmx256m
-XX:PermSize=128M
-XX:MaxNewSize=256m
-XX:MaxPermSize=256m
就ok了
zidasine 2008-11-17
  • 打赏
  • 举报
回复
http://www.java2000.net/p4944
这篇文章分析的很详细
解决也是修改catalina.bat的文件
不过可以看下解决方法的第2条很有道理
如果可能还是换个tomcat吧 up
关注
無名VF 2008-11-17
  • 打赏
  • 举报
回复
up
無名VF 2008-11-17
  • 打赏
  • 举报
回复
up

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧