0

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

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

我的环境:目前我正在使用来自安装的默认设置。我的 tomcat 版本是“Apache Tomcat/7.0.10”,JVM 版本是“1.6.0_24-b24”,我使用的操作系统是“Linux”

服务器日志中的错误显示

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

4

1 回答 1

1

不知道为什么取消部署应用程序会导致 Tomcat 本身停止,也许更多地查看日志并增加日志级别会有所启发。但是,您在 Tomcat 中创建服务器套接字的方法非常奇怪(我质疑如果它实现自己的套接字协议而不是 HTTP,为什么它首先需要在 webapp 中)。

Servlet API 明确建议不要在处理 HTTP servlet 请求时创建新线程。Tomcat 跟踪与每个 webapp 关联的线程池和资源,当你创建一个新的线程时,你实际上已经脱离了它的模型,这就是造成SEVERE:错误的原因。这很可能发生在您ServerSocket获得新的客户端连接并且您初始化一个新的连接Thread来处理它时。

如果您需要实现任何多线程,它应该在 a 中ContextListener,它在加载 webapp 时被初始化。如果 servlet 需要将任何工作卸载到其他线程,则它们会与它通信。永远不要直接从Servlet. 您也可以ServerSocket.ContextListener

于 2012-11-21T17:56:31.907 回答