Tomcat中的多线程

时间:2013-08-09 05:32:14

标签: java multithreading tomcat6

我有多线程应用程序。每隔2分钟激活3个线程,并在套接字编程的帮助下,我们从远程位置写入数据。它工作正常。但随着时间的增加,记忆力也在增加。在一个阶段我的应用程序崩溃。我需要在一天内重启我的apache tomcat服务器twise。按照我的记忆,不通过线程释放。我尝试将未使用的对象设为null,并编写system.gc()。但仍然没有解决问题。

1 个答案:

答案 0 :(得分:1)

你可以做很多事情来解决这个问题。例如:

  • 您的主题可能并不总是在终止。

  • 如果您使用的是线程池,则可能是通过线程本地收集垃圾。

  • 这可能只是一个“普通的”Java内存泄漏;例如故意或意外地在“全局”数据结构中累积大量对象。

我建议如下:

  • 进行线程转储,看看你是否有很多卡住线程。

  • 按照正常程序检查Java中的内存泄漏。


<强>后续

  

根据我的情况,线程在终止后不释放内存。任何想法如何从线程释放内存?

当线程终止时,堆栈会自动释放,Thread对象本身的所有重要字段都将被清零,包括对线程本地映射的引用和对Runnable的引用(如果你提供一个)。这只会留下您在Thread子类中定义的字段。如果你摆脱了应用程序对线程对象的引用,它们将无法访问。

换句话说,如果线程已经终止,那么内存泄漏是一个“普通的”,因为你的应用程序会引用它不再需要的东西。

但如果您没有向我们展示代码,我们无法真正帮助您。