我在Scala应用程序中使用netty-socketio 1.7.18,但是过了一段时间,它以内存不足的错误关闭了应用程序。
我用Javascript创建了一个简单的socketio客户机,并且我不断刷新网页以连接/断开浏览器中的连接/断开连接,堆大小增长非常快(每次重新加载大约100 is ),而且它从未被释放。高达130 It。
我试过手动调用GC,但它没有发布。从VisualVM的角度来看,原因似乎是网络缓冲区。
起初,我怀疑我自己的Scala代码。我将Netty项目的Java演示转换为Scala,以创建一个简单的服务器。但我意识到,当我在Scala中使用netty-socketio时,就会出现这个问题。还有人有这个问题吗?我在找解决办法。
package com.wstest
import com.corundumstudio.socketio.{AckRequest, Configuration, SocketIOClient, SocketIOServer}
import com.corundumstudio.socketio.listener.DataListener
object ScalaLauncher {
@throws[InterruptedException]
def main(args: Array[String]): Unit = {
val config = new Configuration
config.setHostname("localhost")
config.setPort(9092)
val server = new SocketIOServer(config)
server.addEventListener("chatevent", classOf[String], new DataListener[String]() {
override def onData(client: SocketIOClient, data: String, ackRequest: AckRequest): Unit = { // broadcast messages to all clients
server.getBroadcastOperations.sendEvent("chatevent", data)
}
})
server.start()
}发布于 2021-03-12 13:06:55
我用Config.setWorkerThreads(1)解决了
每次刷新页面时,都会启动一个新的nioEventLoopGroup线程,而旧线程没有关闭。
https://stackoverflow.com/questions/66419884
复制相似问题