简体   繁体   English

Java OutOfMemoryError之后,Tomcat无法启动

[英]After Java OutOfMemoryError, Tomcat Won't Start

After running my App in Tomcat many times, I've maxed out the PermGen memory (a problem with my quartz servlet, I suspect) and Java threw a OutOfMemoryError. 在Tomcat中运行我的App多次之后,我已经最大化了PermGen内存(我怀疑是我的石英servlet出现了问题),Java抛出了OutOfMemoryError。 Normally, I just restart tomcat from time to time, but since this happened I'm unable to start/restart. 通常,我只是不时地重新启动tomcat,但是由于这种情况,我无法启动/重新启动。 Tomcat is running in our qa environment and is normally started/stoped/restarted via the sbin folder. Tomcat在我们的qa环境中运行,通常是通过sbin文件夹启动/停止/重新启动的。 I've tried to start tomcat using the alternative, catalina.sh run, but it says the port is being used! 我尝试使用替代方法catalina.sh run来启动tomcat,但它表示该端口已被使用! That led me to suspect that tomcat was already running, but when I try to stop it, I get this error: 这使我怀疑tomcat已经在运行,但是当我尝试停止它时,出现此错误:

SEVERE: Could not contact localhost:8005. 严重:无法联系localhost:8005。 Tomcat may not be running. Tomcat可能未运行。 Jan 19, 2014 3:10:58 PM org.apache.catalina.startup.Catalina stopServer SEVERE: Catalina.stop: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) ... 2014年1月19日3:10:58 PM org.apache.catalina.startup.Catalina stopServer严重:Catalina.stop:java.net.ConnectException:java.net的java.net.PlainSocketImpl.socketConnect(本机方法)拒绝连接java.net上的.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)在java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)在java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)在java.net。 SocksSocketImpl.java:392)位于java.net.Socket.connect(Socket.java:579)...

So, if it's not started or stopped, then what state is tomcat in?! 因此,如果未启动或停止,则Tomcat处于什么状态? How can I bring it back to a startable state? 如何将其恢复为可启动状态?

Update As per Boris's comment, I've used ps auxfww to list processes and the only one with tomcat as the user is the following: 更新根据鲍里斯(Boris)的评论,我使用ps auxfww列出了进程,而唯一使用tomcat的进程如下:

tomcat 5111 8.0 29.0 2052336 556512 ? tomcat 5111 8.0 29.0 2052336 556512? Sl Jan17 221:48 /usr/java/latest/bin/java -Djava.util.logging.config.file=/var/lib/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/usr/share/tomcat/newrelic/newrelic.jar -Xmx512m -Djava.awt.headless=true -Djava.endorsed.dirs=/usr/share/tomcat/endorsed -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.io.tmpdir=/var/lib/tomcat/temp org.apache.catalina.startup.Bootstrap start Sl Jan17 221:48 / usr / java / latest / bin / java -Djava.util.logging.config.file = / var / lib / tomcat / conf / logging.properties -Djava.util.logging.manager = org.apache .juli.ClassLoaderLogManager -javaagent:/usr/share/tomcat/newrelic/newrelic.jar -Xmx512m -Djava.awt.headless = true -Djava.endorsed.dirs = / usr / share / tomcat / endorsed -classpath / usr / share /tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar -Dcatalina.base = / var / lib / tomcat -Dcatalina.home = / usr / share / tomcat -Djava.io。 tmpdir = / var / lib / tomcat / temp org.apache.catalina.startup.Bootstrap启动

For some reason, even as root, I can't delete the process. 由于某些原因,即使是root用户,也无法删除该进程。 I use 我用

sudo kill 5111 须藤杀5111

but the process is still listed after and tomcat still won't restart... 但是之后仍然列出该过程,并且tomcat仍然不会重新启动...

Read about kill here 在此处了解有关杀死的信息

sudo kill -9 5111 will do the work. sudo kill -9 5111将完成这项工作。 Tomcat is binded to 8005 port: until you kill the process with a SIGKILL signal it won't release the port (and you are not allowed to start another tomcat on this port). Tomcat绑定到8005端口:直到您通过SIGKILL信号杀死该进程后,它才会释放该端口(并且不允许您在该端口上启动另一个tomcat)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM