2012-11-21 85 views
0

我有一个Web应用程序,它在内部启动服务器套接字并侦听传入的消息。当我取消部署我的web应用程序时,它也会停止tomcat服务器。Tomcat服务停止在undeplyment

我可以知道是否有任何需要更新的设置来处理这种情况?

我的环境:目前我正在使用来自安装的默认设置。我的tomcat的版本是 “的Apache Tomcat/7.0.10”,JVM版本是 “1.6.0_24-B24”,OS我使用的是 “Linux的” 在服务器日志

错误显示

重度: Web应用程序[/ sampleApp]似乎已经启动了一个名为[Thread-4]的线程,但未能阻止它。这很可能造成内存泄漏。

+0

嗯,Tomcat对错误非常明确。 “取消部署”时停止您的应用程序线程。 –

回答

1

不知道为什么取消部署该应用程序会导致Tomcat本身停止,可能会更多地查看日志并提高日志级别。然而,你在Tomcat中创建一个服务器套接字的方法很奇怪(我质疑为什么如果它实现它自己的套接字协议而不是HTTP,它首先需要在一个web应用程序中)。

Servlet API明确建议不要在处理HTTP Servlet请求时创建新线程。 Tomcat跟踪与每个webapp相关的线程池和资源,当你创建一个新的线程时,你将有效地脱离它的模型,这就是创建这个错误的原因。当您的ServerSocket获得新的客户端连接并初始化新的Thread来处理它时,最有可能发生这种情况。

如果您需要实现任何多线程,它应该在ContextListener中,当webapp加载时它会被初始化。如果servlet需要将任何工作卸载到其他线程,则servlet会与之通信。切勿直接从Servlet创建新线程。您也可以将ServerSocket置于ContextListener中,但是您可能想重新考虑为什么要处理自己的协议和HTTP(可能使用Jetty对您的情况更有意义?)

+0

很好解释.. – Mohsin