【问题标题】:Micronaut application memory issuesMicronaut 应用程序内存问题
【发布时间】:2021-08-12 20:25:39
【问题描述】:

我正在尝试使用 micronaut 创建内存开销较低的微服务。从使用 micronaut 开始,我遇到了一些问题,即在启动时内存开始变低,但在加载时会膨胀并且不会恢复。

我正在使用一个小型应用程序对其进行测试,该应用程序从休息调用中获取一个项目,执行一些工作,以模拟内存峰值,并将结果存储在数据库中。如果我运行 jar 文件,则应用程序以 ~170mb 内存开始,并且在诱导尖峰后约为 700mb。本机映像具有类似的结果,但启动内存较低。使用 xms 和 xmlx 数字确实有助于 jar 版本在峰值后恢复,尽管它会导致本机映像在峰值期间崩溃。

这是 micronaut 的问题吗?有什么办法可以帮助它恢复记忆吗?

以下是我的测试和结果

使用 micronaut.io/launch 创建带有 kotlin、gradle 和 graalvm 插件的 java 11 应用程序。此外,我正在使用包含的 gradle 插件来构建应用程序和本机图像。

java -jar build/docker/layers/application.jar

启动

System memory heap size
~174 mb 50mb used 264mb total

峰值期间

System memory heap size
~1125 mb 250mb used 520mb total

尖峰之后(包括 gc 调用)

System memory heap size
~711 mb 24mb used 88mb total

而对于本机映像,只有系统内存

./build/native-image/application

before during after
13mb 800mb 800mb

【问题讨论】:

  • 您是否检查/比较了问题出在您的实施还是框架本身?
  • "这是 micronaut 的问题吗?" - 从问题中提供的信息中,答案并不清楚。 “有什么办法可以帮助它恢复记忆吗?” - 这取决于消耗内存的内容以及引用对象的方式。如果您可以分享有关应用程序正在做什么的信息,除了“做一些工作,模拟内存峰值”或更好地提供示例应用程序,那将有所帮助。如果它看起来像一个错误,使用示例应用程序在github.com/micronaut-projects/micronaut-core/issues 提交问题会有所帮助。我们很乐意进行调查。
  • @Michal_Szulc 这是一个很好的观点,对于一个绝对简单的应用程序,系统和堆大小保持更紧密的联系,堆大小 100mb 系统内存 250mb。这可能意味着它与我的数据库库有关。我会调查谢谢你
  • 看来问题的主要部分是我使用的数据库库 sql2o,但对于我尝试过的其他一些库,该应用程序将位于 300mb 以上,这似乎很高。但只要应用程序没有出现巨大的内存峰值,它似乎就保持在相当低的水平。

标签: micronaut


【解决方案1】:

这是 micronaut 的问题吗?

很难说所提供的信息,但您的评论“看来问题的大部分是我使用的数据库库,sql2o”表明它可能不是。

有什么办法可以帮助它恢复记忆吗?

您可以使用像 YourKit 这样的运行时分析器来跟踪消耗内存的内容,并使用该信息来确定优化应用程序消耗内存的机会。您可能需要更改的细节取决于了解系统开始消耗内存的原因。

【讨论】:

  • 这就是我遇到的问题,根据 YourKit 的说法,堆大小只有 90mb,所以我没有什么可以优化的。这似乎是问题stackoverflow.com/questions/4893192/process-memory-vs-heap-jvm
  • “这似乎是 stackoverflow.com/questions/4893192/process-memory-vs-heap-jvm 的问题” - 我认为这意味着您的第一个问题的答案是“否”。
猜你喜欢
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多