我刚刚安装了SmartFoxServer。
Dashboard中线程池中的线程计数在重新启动Sfs后不断增加,并且在下次重新启动之前不会再次减少。如果我增加了线程池限制,则线程数会增加到该限制。
任何扩展程序或服务尚未运行,并且线程数在10分钟内增加到1232。所以这看起来不像是内存泄漏,因为不涉及扩展代码,只需简单的SmartFox。
我已尝试过2.9版本,但结果并没有改变。
在没有运行扩展名的情况下,什么可能导致Sfs线程出现这种行为?
答案 0 :(得分:1)
你有内存泄漏。
»内存泄漏
在Java中,当内存中的对象未释放时,会发生内存泄漏 即使应用程序本身不再需要它们。普通的 示例是未从事件中删除的未使用事件侦听器 源。
如果程序不断添加新的侦听器对象但从未被删除 那些不再使用的,我们最终会有很多 记忆浪费。 GC将无法重新获得此类内存,因为 仍然引用了未使用的侦听器。如果这些物体不断堆积 我们将看到可能最终导致的逐步性能下降 JVM崩溃。
内存泄漏并不总是非常明显,潜伏在代码中 在他们被发现之前已经有一段时间了。在其他情况下 泄漏可能会很快变得非常讨厌,从而造成严重的飙升 记忆的使用,最终导致过程的死亡 来源:http://docs2x.smartfoxserver.com/AdvancedTopics/troubleshooting-live-server#mem
答案 1 :(得分:0)
一个好的开始是尝试确定所有线程是什么。您可以使用jstack
(包含在JDK中)来获取所有线程的堆栈转储,这些堆栈转储应该可以帮助您发现它们的用途,并希望如何减少它们的数量。
jstack -l JAVA_PID > jstack.out