线程总是在增加

Posted

技术标签:

【中文标题】线程总是在增加【英文标题】:Threads are always increasing 【发布时间】:2017-01-14 08:52:40 【问题描述】:

我刚刚安装了 SmartFoxServer。

重启 Sfs 后 Dashboard 的线程池中的线程数不断增加,直到下次重启后才再次减少。如果我增加线程池限制,线程数会增加到该限制。

任何扩展或服务尚未运行,线程数在 10 分钟内增加到 1232。所以这看起来不像是内存泄漏,因为没有涉及扩展代码,只是普通的 SmartFox。

我尝试了 2.9 版,但结果没有改变。

什么可能导致 Sfs 线程在没有运行扩展的情况下出现这种行为?

【问题讨论】:

您有使用的代码吗? @HorsSujet 即使我不使用任何扩展,也至少使用了 1040 个线程。 【参考方案1】:

你有内存泄漏。

» 内存泄漏

在 Java 中,当内存中的对象未释放时会发生内存泄漏 即使应用程序本身不再需要它们。普通的 示例是未从其事件中删除的未使用的事件侦听器 来源。

如果程序不断添加新的侦听器对象但从未摆脱 那些不再使用的,我们最终可能会有很多 内存浪费。 GC 将无法重新获得此类内存,因为 仍然引用未使用的侦听器。如果这些物体不断堆积 我们将看到性能逐渐下降,最终可能会出现在 JVM 崩溃。

内存泄漏并不总是很明显,潜伏在代码中 在他们被发现之前很长一段时间。在其他情况下 泄漏可能会很快变得非常讨厌,从而导致严重的峰值 内存使用并最终导致进程死亡。来源:http://docs2x.smartfoxserver.com/AdvancedTopics/troubleshooting-live-server#mem

【讨论】:

在这种情况下不应该是“资源泄漏”,还是“内存泄漏”泛化到足以涵盖这种情况? 我已经考虑过了,并重新安装了 SmartFox Server,没有附加任何扩展或 swf。我什至不使用任何代码,但是干净的 SmartFox2 安装带有 1040 个线程。 您尝试更改 config.xml 吗? <SysHandlerThreads>5</SysHandlerThreads> 是的,我尝试减少线程数设置,但仍然没有成功。【参考方案2】:

一个好的开始是尝试确定所有线程是什么。您可以使用jstack(包含在 JDK 中)来获取所有线程的堆栈转储,这将有助于您发现它们的用途并希望如何减少它们的数量。

jstack -l JAVA_PID > jstack.out

【讨论】:

以上是关于线程总是在增加的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net Core 中增加最大线程池限制

当前逻辑线程增加/线程堆栈泄漏

在 Java 中完成任务时线程在增加但不减少

推断为什么线程在java应用程序中增加了

在 MFC 中不断增加进度条

如何增加linux中运行cppcheck进程的线程数