线程总是在增加
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
【讨论】:
以上是关于线程总是在增加的主要内容,如果未能解决你的问题,请参考以下文章