我正在尝试在生产服务器中部署我的应用时遇到一些问题。
我有一台用于开发的ubuntu机器,我的servlet工作正常。大约一个月没有问题。
然后我将它部署到我的生产机器(VM debian)。我停止了tomcat,我将war文件复制到webapps文件夹并再次启动tomcat。
首先,当我尝试停止/启动/重启tomcat时,我得到了这个"错误":
root@VMMachine-34199:~/folder# sudo /etc/init.d/tomcat6 restart
[ ok ] Stopping Tomcat servlet engine: tomcat6 Tomcat servlet engine is not running but pid file exists, cleaning up.
[ ok ] Starting Tomcat servlet engine: tomcat6.
root@VMMachine-34199:~/folder# sudo /etc/init.d/tomcat6 status
[ ok ] Tomcat servlet engine is running with pid 22627.
root@VMMachine-34199:~/folder# sudo /etc/init.d/tomcat6 status
[ ok ] Tomcat servlet engine is not running, but pid file exists..
我不知道如何避免这种情况。总是发生在生产机器上。
之后,我有另外一个问题,不知道是否与第一个有关。
在catalina.out我得到:
java.net.BindException: Address already in use <null>:9010
9010是tomcat端口。此端口仅用于通过我拥有的其他服务连接到我部署的战争之一。使用netstat -atnp | grep 9010,我只看到其他服务LISTEN。
但是在此之后,tomcat似乎开始了,在我的servlet中注册了两个可用的资源,依此类推。
最后,我在catalina.out中得到了这个:
May 05, 2014 8:34:29 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/var/lib/tomcat6/webapps/SERVLET/WEB-INF/lib/servlet-api-2.3.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
May 05, 2014 8:34:47 AM org.apache.tomcat.util.digester.Digester endElement
SEVERE: End event threw error
java.lang.OutOfMemoryError: PermGen space
May 05, 2014 8:34:47 AM org.apache.tomcat.util.modeler.Registry registerComponent
SEVERE: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/SERVLET,J2EEApplication=none,J2EEServer=none
May 05, 2014 8:34:47 AM org.apache.catalina.startup.HostConfig deployDirectory
SEVERE: Error deploying web application directory SERVLET
java.lang.OutOfMemoryError: PermGen space
正如我已经说过的,在开发机器中,tomcat运行良好,从未给我这些错误,所以我不知道如何处理它们。
我正在使用这个库Log4j。我在这里读到:http://javarevisited.blogspot.com.es/2012/01/tomcat-javalangoutofmemoryerror-permgen.html会导致Permgem错误。不知道这是否可以帮助你找出我的问题
现在我在启动时得到它并停止:
2014年5月5日上午8:42:17 org.apache.coyote.http11.Http11Protocol暂停 信息:在http-9010上暂停Coyote HTTP / 1.1 2014年5月5日上午8:42:18 org.apache.catalina.core.StandardService停止 信息:停止服务Catalina 2014年5月5日上午8:42:18 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 严重:Web应用程序[/ SERVLET]似乎已启动名为[Timer-0]的线程,但未能将其停止。这很可能造成内存泄漏。 2014年5月5日上午8:42:18 org.apache.coyote.http11.Http11Protocol销毁 信息:在http-9010上停止Coyote HTTP / 1.1
答案 0 :(得分:0)
尝试增加生产服务器上VM的PermGen大小(它是JVM保留类中的内存区域以及保证不会更改的一些其他常量,很少需要进行垃圾回收)。 / p>
请参阅Increase PermGen Space问题。
答案 1 :(得分:0)
关闭服务以验证或更改服务或tomcat的端口。 尝试增加jvm内存检查此链接 Increase permgen space 如果是ubuntu 64位操作系统,请尝试更改为64位JVM。 可能是大小增长的应用罐。如果未使用或不必要,请减少正在使用的应用程序jar。 获取转储并验证哪个线程失败。
答案 2 :(得分:0)
您如何“我停止了tomcat”?
我总是
function overwrite_error_log() {
ini_set( 'error_log', '/dev/stdout' ); // phpcs:ignore
}
add_action( 'init', 'overwrite_error_log', 10 );
但不使用
kill -9 ${pid}
使用shutdown.sh脚本存在问题。