本文主要是介绍tomcatec出错-Web app root system property already set to different value,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
因为一些原因要对比两个项目工程中的区别,因此我想在我的tomcat上同时部署这两个项目。可是发布两个项目启动tomcat服务器时报错了。错误信息如下:
Web app root system property already set to different value: 'webapp.root' = [C:\tomcat7.059\webapps\POM\] instead of [C:\tomcat7.059\webapps\pom-web\] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
网上查找了一个解决方法可以解决这个问题:
解决方法:
请注意${webapp.root}这个变量 ,对照着错误提示大概看了一下,意思是说Web应用程序根系统属性已经被设置,说白了就是说'webapp.root' 这个配置名称已经被使用了,不能再用这个了,
并且也提示了Choose unique values for the 'webAppRootKey' context-param in your web.xml files ,也就是说我们可以在web.xml里配置一个唯一的'webAppRootKey' ,这样就不会冲突了。
这个问题会出现在一个WEB服务器同时部署多个使用了Log4j的应用上,如果配置不当,出这个错误还真会让你郁闷到抓狂。我就是出这个问题了,一个Tomcat部署了2个使用了Log4j的项目。
然后我这样解决:按给的提示在web.xml里加上
Java代码 收藏代码
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>myapp.root</param-value>
</context-param>
<!-- 解决一个web服务器上部署多个Log4j应用出现错误的问题 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>pom-web.root</param-value>
</context-param>
然后在 log4j.properties里就写成${myapp.root},只要这个名称不重复,就不会产生Web app root system property already set to different value的错误了。虽然正式使用时一台服务器部署多个应用程序的情况会比较少,但是还是保险起见吧,也对我们的程序相关的命名标准化吧,把
${webapp.root}改成${[应用程序].root}。
http://yzxqml.iteye.com/blog/1761540
----------------
上面的问题解决后,两个项目工程代码发布以及启动tomcat后控制台都没有出错。可是访问项目页面时控制台会出现错误:信息如下
java.lang.OutOfMemoryError: PermGen space
内存永久区域溢出。 这个问题从没有遇到过。百度到的方法,也已解决这个问题。
---------------------------------------------------
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 2、在tomcat中redeploy时出现outofmemory的错误. 可以有以下几个方面的原因:
1,使用了proxool,因为proxool内部包含了一个老版本的cglib.
2, log4j,最好不用,只用common-logging
3, 老版本的cglib,快点更新到最新版。
4,更新到最新的hibernate3.2 3、
解决过程:
解决OutOfMemoryError: PermGen space,过程是痛苦的,结果是舒畅的
最近自己的程序在Redeploy重新部署的时候,老提示OutOfMemoryError: PermGen space错误,在网络上搜索了相关的资料,但是按照做后还是存在这个问题。由于我是第一次碰到这个问题,花费了我2天时间,过程比较痛苦,结果还是比较圆满的。我将我的经历写下来,供我自己以后参考,也提供给大家分享。
在网络上关于OutOfMemoryError: PermGen space的解决办法很多了,但是有的办法都是互相转发,真假难辨。有的可能还产生误导。
我的环境是Myeclips 8.5、tomcat6.x,试过了很多办法后,比如:文档《Linux 和 Windows修改Java虚拟机内存大小》(http://duanfei.iteye.com/blog/1189541),中的办法,我都试过了,还是不行;当然还参考了很多其他资料,然后进一步研究JVM的优化等,我就是想知道我配置的内存参数应该够大了,为什么还是溢出,难道没有生效,那我就需要找到配置后系统认可的内存参数是多少,参考网络上的知识,启动了JDK自带的工具,在\jdk1.6.0_10\bin下面的jconsole.exe内存监控的工具,点击进入如下:选择PID为4472的这个进程,
点击 ,进入如下界面,
选择内存页,并且选择图表中最后一个选项的“内存池“Perm Gen”,下面的详细信息显示的是:
这个地方的最大值是65536Kb,也就是64M,我于是就找到原因了,64M肯定会导致溢出,但是我配置了几百兆的内存空间就是不生效呢。注意,这个是我在myclipse中启动的tomcat看到的结果。
接下来,我进入bin/catalina.bat文件中的“rem ----- Execute The Requested Command -”这个后面增加了下面的语句set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=512m,这个地方注意增加的位置是在rem ----- Execute The Requested Command –后面,最好set JAVA_OPTS=%JAVA_OPTS% 这个也要加上,这个网络上好多文档没有将这个位置交代清楚,或者说的不是这个地方,是不是其他地方也可以,我没有试。我手工启动tomcat,在cmd状态下输入:startup,然后看jconsole.exe,明细Perm Gen的内存就是我配置的内存521M,是生效了的.
但是我在myclipse中启动tomcat后,重新部署程序,错误依旧。原来文档《Linux 和 Windows修改Java虚拟机内存大小》(http://duanfei.iteye.com/blog/1189541)中提到
如果是通过Myeclipse启动Tomcat修改
Myeclipse配置选项 打开选项..输入tomcat关键字,然后点开Server下面的JDK就会出现配置区域Optional Java VM arguments.
直接加入 -Xms128m -Xmx512m
这个地方是有一个漏洞的,直接加入 “-Xms128m -Xmx512m ”,应该是“ -Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m”,这个是对myclipse生效的。如果没有-XX:PermSize=256m -XX:MaxPermSize=512m,那么PermGen的内存始终是64M。修改后,重启tomcat,重新部署,内存不再溢出了。
我的机器上是:Servers/Tomcat/Tomcat 6.x/JDK 中的Optional Java VM arguments:
找到了原因,解决也就自然很简单了。
注意这个地方Servers/Tomcat/Tomcat 6.x 这个地方还有一个参数:Optional program arguments,这个感觉作用不大,我也是修改后没有什么效果,我以为修改这个地方就可以了,导致我走了弯路。
http://blog.csdn.net/fengyie007/article/details/1780375/
----------------------------------------------------
之后两个项目成功的部署在tomcat上,运行也正常,可以愉快的玩耍了。。。。
这篇关于tomcatec出错-Web app root system property already set to different value的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!