【问题标题】:How to overcome the heapdump created by Vaadin ScssCache?如何克服由 Vaadin ScssCache 创建的堆转储?
【发布时间】:2018-12-31 19:00:34
【问题描述】:

我使用Vaadin 创建了一个应用程序,具有相应的用户界面。

我在最大堆负载为 250 Mb 的服务器中运行。应用程序由于堆加载而崩溃,因为它没有被垃圾收集。

我尝试使用visualVM 分析器运行。发现有很多实例,不知何故,vaadin ScssCache 搞得一团糟。

我该如何纠正这个错误?是因为浏览器缓存设置还是我应该对 vaadinservletcache 条目做些什么?

我真的不明白请帮忙。我附上了我的 VisualVm 屏幕截图以供参考。非常感谢。我正在使用 vaadin 7.6.3。

【问题讨论】:

  • 它拥有 1.2MB 的有效 CSS 以在启动时交付给每个客户端。你认为这里发生了什么错误?您的应用程序/vaadin servlet 是否在生产模式下运行?
  • 是的,它正在生产模式下运行。它可以正常工作几分钟,然后逐渐增加,垃圾收集器不会清除它。
  • 所以这个截图是一开始就做的?在应用程序转储核心之前,此缓存会增长到什么程度?

标签: java sass vaadin heap-memory heap-dump


【解决方案1】:

随附的 VisualVM 屏幕截图显示,整个scssCache 保留了 1248kb 的内存,其中 1200kb 用于实际缓存的 CSS 内容。这不到 250mb 堆大小的 1%,很可能不是问题。

带有已编译 CSS 的 1200kb char[] 可能是堆上最大的单个对象,但只有一个这样的对象。因此,您将不得不寻找其他消耗大量内存的东西。我建议查看按保留大小排序的类列表,忽略低级类,例如 char[]java.lang.Stringjava.Util.HashMap,而是尝试找出与您自己的应用程序相关的任何内容。

我还鼓励您验证您的应用程序实际上是在生产模式下运行的,因为我可以识别出与scssCache 执行任何操作的唯一代码路径是通过VaadinServlet.serveOnTheFlyCompiledScss 检查是否启用了生产模式并在其中case 在触及缓存之前返回。

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 2012-06-22
    • 1970-01-01
    • 2022-07-22
    • 2011-02-03
    • 2012-03-18
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多