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