lizhongxkd 2009-01-14 16:14
浏览 290
已采纳

jvm 疑惑

写了个ANT实现把本地代码打成*war然后替换服务器上正在运行的项目.小弟思路是先undeploy服务器上项目,然后再deploy新的,终于达到目的. 但是如果在本地执行一次ANT,成功后又继续执行一才ANT,这样5次左右,服务器的TOMCAT会报:java.lang.OutOfMemoryError: PermGen 错误,上网查询知道解决问题方法是:JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m “Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误”
但是有个问题就疑问了:即使我增大了PermSize,也许我连续5次不会报错了,但是我也许10次或者更多次,会不会报错?
像我这种情况,在每次ANT后,服务器的PermGen space加载class,在不重启动tomcat情况下,我下次使用ANT的时候,PermGen space会不会实现累计加载,就像本来100个地方,第一次用了20个地方,第2次用了20个地方,所以说第5次就出错.
望大虾帮我解惑!如果有方法在ANT下解决这个问题,请指导

[b]问题补充:[/b]
lewhwa:
我可不可以这样理解你的话:就是说如果TOMCAT不关闭,我每ANT一次,classloader会增加PermGen space里的class数量,所以说,如果我在我不停止tomcat的情况下,继续ANT的话,就会出现:java.lang.OutOfMemoryError: PermGen ?请指导,我就想知道到底是怎么回事
[b]问题补充:[/b]
lewhwa:
我用的是tomcat5.5...
http://wiki.apache.org/tomcat/FAQ/Deployment 刚刚看到这个 觉得好象有点懂了,但是同样又出问题了,是不是除了重启tomcat才能根本解决这个问题?因为我根本不知道我在第几次ANT的时候 会出现问题... 还有你刚说的"Ant进行部署和构建采用的JVM,Tomcat有自己的JVM" 这个麻烦给个连接让我了解哈...
[b]问题补充:[/b]
bohemia:
我刚刚还在查ant的undeploy能不能释放"PermGen space"里的class?但是一直没找到.. 请指导哈
[b]问题补充:[/b]
lewhwa:
你的意思是不是说:ant的undeploy能释放"PermGen space"里的class,这样再次deploy时候不会让"PermGen space" 累加?如果出错的话,肯定是因为应用本身的问题?
[b]问题补充:[/b]
lewhwa:
我现在又重新测试了哈,在第4次ANT后,服务器的tomcat,又出现这种问题:java.lang.OutOfMemoryError: PermGen ,
我在Tomcat Wiki 下找到这样的话:
Why does the memory usage increase when I redeploy a web application?

Because the Classloader (and the Class objects it loaded) cannot be recycled. They are stored in the permanent heap generation by the JVM, and when you redepoy a new class loader is created, which loads another copy of all these classes. This can cause OufOfMemoryErrors eventually.
-----按我的理解它的意思跟你的看法有些不一样..不知道是我理解错误,还是....请指导
[b]问题补充:[/b]
lewhwa:
也就是说 我现在应该从应用上找问题? 如果是这样,请指导哈方法..

  • 写回答

11条回答 默认 最新

  • wwwghost 2009-01-14 17:52
    关注

    [quote]也就是说 我现在应该从应用上找问题? 如果是这样,请指导哈方法..[/quote]
    要得,不过你先用一个empty Web Application多做一下Deploy和unploy试验试试看。
    另外可以用JConsole(JDK自带),和JProfile来监视。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计