我们的项目需要对某些war包进行热部署,开始的时候部署个1,2个进去没有什么问题,现在到系统测试了,一次扔进去10个8个的tomcat就挂掉了,查了很多资料说是要改tomcat所占内存大小,就算我把2G内存都给了他也不能解决根本问题啊,我们项目起来以后可能会有上百个这个的war包需要热部署进去,而且被部署的项目服务器不关是不能删除的,这样webapps下会有越来越多的项目,是不是当初设计的时候就不应该用tomcat?有这方面的经验的高手指点下,这问题能解决吗,还是必须要换一个服务器?
`java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)`
这个异常是我在正常启动tomcat的时候报的(部署了25个项目)
删除几个项目后启动又报:
`java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1819)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1327)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)`
有这方面的经验的高手指点下,这问题能解决吗,还是必须要换一个服务器?
加内存或者升级JDK, 好像jdk7 的 permGen 可以回收了
permgen 内存大小是可以设置的,这块内存区域一般理解为加载应用、应用服务器的jar包之类,如果应用jar包太多,多次热部署这个区域就会溢出。所以可以适当把permgen值调大一些。
最好根据应用运行之后的实际内存要求设置下jvm 的 heap 大小。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。