许多线程连接使系统不稳定

时间:2012-03-18 14:42:09

标签: java multithreading tomcat tcp

我正在构建一个JAVA TCP侦听器,它可以一次处理6000个传入请求。我正在创建一个套接字连接并接受数据,在接受数据之后,我正在通过创建一个线程对它进行一些操作,但我不会杀死这个线程,因为设备将每两分钟发送一次数据,所以我只是在制作线程睡眠模式30秒。

但是在运行系统五分钟后,我的应用程序在tomcat6.0下运行时发出错误 - “Web应用程序似乎已经启动了一个名为[Thread-214]的线程,但未能阻止它。这很可能创建内存泄漏。“

请帮我理解我做错了什么?

提前致谢。

5 个答案:

答案 0 :(得分:2)

如果您有许多套接字,而不是每个通道使用线程。 尝试使用遍历所有套接字的一个线程。 看看Java Selector http://www.exampledepot.com/egs/java.nio/NbClient.html

答案 1 :(得分:1)

您应该知道您的操作系统无法处理那么多线程。此外,为每个线程分配内存,因此您将很快填满堆。

由于我不知道你想要实现什么,我只是猜测你的应用程序中存在设计缺陷,通常会重用线程来处理请求。

答案 2 :(得分:0)

我认为Selector可能有所帮助。您可能希望在此链接中阅读有关选择器的简短介绍http://tutorials.jenkov.com/java-nio/selectors.html “Selector是一个Java NIO组件,它可以检查一个或多个NIO通道,并确定哪些通道可以用于例如读取或写入。这样一个线程就可以管理多个通道,从而管理多个网络连接。”

答案 3 :(得分:0)

如果您需要使用Java处理许多TCP连接 - 您应该使用NIO。但编程裸NIO(选择器)很难 - 所以使用Netty,它是专门为这些任务设计的。 Netty在Tomcat中运行良好。

答案 4 :(得分:-2)