我使用具有各自UI的Vaadin
创建了一个应用程序。
我正在最大堆负载为250 Mb的服务器上运行。由于未进行垃圾收集,因此应用程序由于堆负载而崩溃。
我尝试使用visualVM
分析器运行。发现有很多实例,并且以某种方式让vaadin ScssCache弄得一团糟。
如何纠正此错误?是因为浏览器缓存设置,还是我应该对vaadinservletcache条目执行某些操作?
我真的不明白,请帮忙。我已附上我的VisualVm屏幕快照以供参考。非常感谢你。我正在使用vaadin 7.6.3。
答案 0 :(得分:0)
附加的VisualVM屏幕快照显示,整个scssCache
保留1248kb的内存,其中1200kb用于实际缓存的CSS内容。这不到您250mb堆大小的1%,很可能不是问题所在。
带有已编译CSS的1200kb char[]
可能是堆上最大的单个对象,但是只有一个这样的对象。因此,您将不得不寻找其他消耗大量内存的东西。我建议查看按其保留大小排序的类列表,并忽略诸如char[]
,java.lang.String
或java.Util.HashMap
之类的低级类,而尝试找出与您的内容相关的任何内容自己的应用程序。
我也鼓励您验证应用程序是否实际在生产模式下运行,因为我可以识别出对scssCache
进行任何操作的唯一代码路径是通过VaadinServlet.serveOnTheFlyCompiledScss
来检查生产模式是否为启用,在这种情况下会在触摸缓存之前返回。