posts - 3,  comments - 12,  trackbacks - 0
PermGen space这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
我在做TMS的发布工具的时候,就遇到了问题,这个工具的目的是把一个相同的系统,在tomcat下自动的发布多份,但当卸载,重新发布多次后, tomcat就挂了,整个电脑如同死机一般。后来使用文章里的set JAVA_OPTS=-server -Xms800m -Xmx800m -XX:PermSize=64M-XX:MaxNewSize=256m-XX:MaxPermSize=128m -Djava.awt.headless=true 解决了问题,不过在2G的电脑上,我是把-XX:MaxPermSize=128m 调到了-XX:MaxPermSize=256m。另外我还尝试了把所有的lib都放到tomcat的lib下,一些lib就不能在本项目中再出现了。
现在看,还是spring,hibernate之类的产生的类导致PermGen space空间不足造成的这些问题。
http://www.javaeye.com/topic/80620?page=1 这个帖子里讨论了这个问题,有人做了些有益的分析可以看看。
我又继续在我的笔记本上做了测试T42,1G内存。tomcat版本6.0.14。
set JAVA_OPTS=-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true
这个配置反复发布是可以的,另外又一次测试了将项目下的jar包放到tomcat的lib下的对比。重新安装一个lib下为空的程序是10秒,否则是30秒。

总结一下:
1、修改tomcat的启动参数,类似如下的样子
set JAVA_OPTS=-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
 
echo Using CATALINA_BASE:   %CATALINA_BASE%
echo Using CATALINA_HOME:   %CATALINA_HOME%
echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
if ""%1"" == ""debug"" goto use_jdk
echo Using JRE_HOME:        %JRE_HOME%
goto java_dir_displayed
:use_jdk
echo Using JAVA_HOME:       %JAVA_HOME%
:java_dir_displayed

echo Using JAVA_OPTS: %JAVA_OPTS%
set JAVA_OPTS=-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

2、将通用的lib文件放到tomcat的目录下
posted on 2011-05-29 23:05 [ 王志伟 ] 阅读(354) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔档案(3)

文章档案(29)

搜索

  •  

最新评论

阅读排行榜

评论排行榜