【问题标题】:Memory leak issue in (Scala + Akka HTTP) micro service(Scala + Akka HTTP) 微服务​​中的内存泄漏问题
【发布时间】:2017-10-06 17:00:41
【问题描述】:

我已将我的微服务部署到 AWS 服务器上的 docker 容器中,该容器是使用 Akka-HTTP(https://github.com/theiterators/akka-http-microservice) 和 Scala 编写的。将服务部署到 AWS 服务器后,我将面临内存泄漏问题和性能问题。

我注意到,当服务器收到更多请求(如 340mb、410mb、422mb...)时,内存使用量会增加,并且取决于负载,然后它会自动降到正常状态(230mb)。但是,当服务器收到更多请求时,内存使用量不断增加,即使在 CPU 使用率达到正常阶段后,它也无法释放未使用的内存,最终达到最大值(512mb)并崩溃。

如果它正确清除未使用的内存/资源,我们可以避免这种情况。 JVM 应该使用垃圾收集器自行处理内存使用。但是一旦处理了请求,它就无法清除不需要的内存(对象)。我正在使用下面的代码来清除 Akka.HTTP 演员对象。

try {
    <-- code block -->
} catch {
case e: Exception =>
    sys.addShutdownHook(system.shutdown())
} finally {
    sys.addShutdownHook(system.shutdown())
}

如何在执行过程完成后立即删除未使用的内存/资源?

请尽快为我们提供解决方案/方法来解决此问题,因为这对我们来说是一个非常关键的问题?

【问题讨论】:

  • 很难(不可能?)对这个问题给出一个有意义的答案。请考虑根据 SO 建议 (stackoverflow.com/help/mcve) 创建一个最小、完整和可验证的示例
  • 512mb 听起来像是一个非常小的堆,用于运行 Scala Web 服务。尝试给它更多的堆(比如 2g),看看是否能解决你的问题
  • 那是什么版本的akka​​-http?我们在去年修复了一些内存泄漏。
  • @jrudolph 我们正在使用 akka-http 2.4.3 版来开发我们的微服务。
  • 然后尝试更新到最新的akka​​-http 10.0.6和akka 2.4.18

标签: scala memory-leaks garbage-collection akka-http


【解决方案1】:

首先,您应该删除应该解决问题的代码。

顺便说一句,如果你对每个请求都这样做,你可以用这些关闭挂钩破坏所有内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2012-10-06
    • 1970-01-01
    • 2016-03-07
    • 2016-06-09
    • 2016-07-28
    相关资源
    最近更新 更多