在Play中分析内存使用情况!构架

问题描述

我有戏!我已经在生产环境中运行了3年的框架应用程序。 但是,最近我已将版本从2.5升级到2.8(需要将折旧的功能更改)。在此过程中,我开始使用更多的Akka演员。

但是,现在我在一段时间(2-5天)内用尽了内存,这是以前没有发生的。由于升级一个很大的重写,所以我不能轻易回去,所以想知道是否容易看出为什么我的内存使用量一直在增加。 )。

我确实添加了15分钟的内存检查并保存了值,下面的图形是结果,清楚地显示了增量结果。

enter image description here

最初,我认为这是新Akka演员创建但未发布的问题。尽管参与者的数量增加,但在使其中一些成员成为Singleton(他们中没有变量)之后,情况似乎并非如此。

有没有办法查看占用此内存的内容?我希望它具有参考意义,因此不会释放内存,但是很难找到是否有任何线索。

[编辑] 运行MAT之后,似乎akka.actor.ActorCell保留了我发送给客户端的所有JSON数据。这是过程。有没有理由不发布数据?我需要使用Materializer或Source吗?

 private void sendDeviceData(List<Device> devices){
    ObjectNode response = Json.newObject();
    ObjectNode statusScreen = response.putObject("statusScreen");
    ArrayNode items = statusScreen.putArray("devices");         
    for(Device device : devices) {
        items.add(Json.parse(device.getStatusJson()));
    }
    Source<JsonNode,NotUsed> source = Source.single(response);
    source.to(hubSink).run(mat);
}

[编辑2] 请在附件中找到转储的屏幕截图。似乎都是出于某种原因嵌套的。

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)