12

我刚刚安装了 SmartFoxServer。

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

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

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

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

4

2 回答 2

2

你有内存泄漏。

» 内存泄漏

在 Java 中,当内存中的对象没有被释放时,即使应用程序本身不再需要它们,也会发生内存泄漏。一个常见的例子是未从其事件源中删除的未使用的事件侦听器。

如果程序不断添加新的侦听器对象,但从未删除那些不再使用的对象,我们最终可能会浪费大量内存。GC 将无法重新获得此类内存,因为仍然引用了未使用的侦听器。如果这些对象不断堆积,我们将看到性能逐渐下降,最终可能导致 JVM 崩溃。

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

于 2016-09-09T12:49:26.793 回答
1

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

jstack -l JAVA_PID > jstack.out
于 2016-12-30T01:19:41.767 回答