0

我在我的 Scala 应用程序中使用 netty-socketio 1.7.18,但过了一段时间它会因为内存不足错误而关闭应用程序。

我使用 Javascript 创建了一个简单的 socketio 客户端,并且我不断刷新网页以在浏览器中连接/断开连接,堆大小增长非常快(每次重新加载约 100mb)并且它从未被释放。它高达130GB。

我尝试手动调用 GC,但它没有释放。从 VisualVM 看,原因似乎是 netty 缓冲区。

起初我怀疑我自己的 Scala 代码。我将 Netty-socketio 项目的Java 演示转换为 Scala 以创建一个简单的服务器。但是我意识到当我将 netty-socketio 与 Scala 一起使用时会发生这个问题。其他人有这个问题吗?我正在寻找解决方案。

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()
}
4

1 回答 1

0

我解决了Config.setWorkerThreads(1)
每次刷新页面时,都会启动一个新的 nioEventLoopGroup 线程并且没有关闭旧的线程。

于 2021-03-12T13:06:55.057 回答