我有一个Linux服务器(Ubuntu 11.10 x64)。
我用root用户在端口80上运行Tomcat。 它只有一个应用程序(约8Mbs)。 每当我启动tomcat,我得到OutOfMemoryError 。 (这个Tomcat的目的是处理域名,子域名,并将它们转发给相应的应用程序。为了更清楚,当我点击“sub.domain.com”时 ,它被转发到应用程序“sub” )。
有趣的是,在同一台服务器上,我创build了一个新用户 ,并且我安装了configuration为在端口8080上运行的tomcat 。 我部署了3个应用程序 (总共40 Mbs),它开始完美! 我无法处理这个服务器的域名,因为它不能在端口80上运行,所以对我来说并不好。
为什么会发生? 我能做些什么来使tomcat在端口80上运行?
这里是catalina.out的tomcat日志输出
INFO: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans metho ds marked with these annotations will have said annotations processed. Nov 09, 2012 4:21:26 PM org.primefaces.webapp.PostConstructApplicationEventListe ner processEvent INFO: Running on PrimeFaces 3.4.RC1 Nov 09, 2012 4:21:26 PM com.sun.faces.config.ConfigureListener$WebConfigResource Monitor$Monitor <init> INFO: Monitoring jndi:/stk.meselen.com/WEB-INF/faces-config.xml for modification s Nov 09, 2012 4:21:45 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [19,497] milliseconds. Nov 09, 2012 4:21:45 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory stk Nov 09, 2012 4:21:45 PM org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile(/var/lib/tomcat7/webapps/stk/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class Nov 09, 2012 4:21:51 PM com.sun.faces.config.ConfigureListener contextInitialized INFO: Initializing Mojarra 2.1.7 (SNAPSHOT 20120206) for context '/stk' Nov 09, 2012 4:21:52 PM com.sun.faces.spi.InjectionProviderFactory createInstance INFO: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed. Nov 09, 2012 4:21:53 PM org.primefaces.webapp.PostConstructApplicationEventListener processEvent INFO: Running on PrimeFaces 3.4.RC1 Nov 09, 2012 4:21:53 PM com.sun.faces.config.ConfigureListener$WebConfigResourceMonitor$Monitor <init> INFO: Monitoring jndi:/stk.meselen.com/stk/WEB-INF/faces-config.xml for modifications Nov 09, 2012 4:21:53 PM org.apache.catalina.startup.HostConfig deployDescriptor INFO: Deploying configuration descriptor host-manager.xml from /etc/tomcat7/Catalina/www.meselen.com Nov 09, 2012 4:21:53 PM org.apache.catalina.startup.HostConfig deployDescriptor INFO: Deploying configuration descriptor manager.xml from /etc/tomcat7/Catalina/www.meselen.com Nov 09, 2012 4:21:53 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory stk Nov 09, 2012 4:21:54 PM org.apache.catalina.loader.WebappClassLoader validateJarFile INFO: validateJarFile(/var/lib/tomcat7/webapps/stk/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1150) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2006) at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1969) at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1858) at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1826) at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1812) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1306) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:896) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:322) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:148) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607) at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1055) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:978) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:472) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1329) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389) at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:334) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041)
这里是ulimit -a输出
core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 15675 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 15675 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
我发现这个问题是由于2台主机使用相同的appBase。 所以我更改了主机的server.xml中的appBases。 它现在工作完美。