2017-05-08 86 views
0

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

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

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

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

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

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

+0

这是非常困难的(不可能?)给这个问题有意义的答案。请考虑根据SO建议(https://stackoverflow.com/help/mcve)创建一个最小,完整和可验证示例。 –

+0

512mb听起来像是一个运行scala Web服务的非常小的堆。 尝试给它更多的堆(比如说2g),然后看看是否可以解决你的问题 – Dima

+0

是什么版本的AKK-HTTP?去年我们修复了一些内存泄漏。 – jrudolph

回答

0

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

顺便说一句,如果你在每个请求上执行它,你可以利用这些关闭钩子来破坏所有的内存。