weblogic out of space in CodeCache for adapters导致宕机

weblogic会莫名的宕机,宕机日志跟以往的不同:

Caused By: java.lang.VirtualMachineError: out of space in CodeCache for adapters

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)at net.sf.jasperreports.engine.fill.JREvaluator.init(JREvaluator.java:88)at net.sf.jasperreports.engine.fill.JRCalculator.init(JRCalculator.java:111)at net.sf.jasperreports.engine.fill.JRFillDataset.initCalculator(JRFillDataset.java:469)at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:529)at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88)at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103)at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:61)at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153)at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:55)at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446)at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849)at com.gg.datareport.reportform.appservice.impl.JRService.getJasperPrint(JRService.java:1017)

at com.gg.datareport.reportform.appservice.impl.JRService.reportHTMLByTemplToResp(JRService.java:1123)

代码缓存区满,原因是第三方报表工具用到了groovy,动态生成了很多类,网络上解释为:

Code Cache用满一方面是因为空间可能不够用,另一方面是Code Cache是不会回收的,所以会累积的越来越多(其实在不采用groovy这种动态更新/装载class的情况下的话,是不会太多的),所以解法一可以是增大code cache的size,可通过在启动参数上增加-XX:ReservedCodeCacheSize=256m(Oracle JVM Team那边也是推荐把code cache调大的),二是启用code cache的回收机制,可通过在启动参数上增加:-XX:+UseCodeCacheFlushing来启用。

调整1:将现场的weblogic启动参数调整为:-XX:ReservedCodeCacheSize=1024m,宕机的频率下降,不过还是有宕机。

调整2:再加上参数-XX:+UseCodeCacheFlushing ,到目前为止很稳定。

总结:不过要解决根上的问题,还是要看下代码,检查哪里没有内存泄露的问题。这个第三方的报表工具是新加入的组件,,新的东西会带来新的问题,所以问题诊断也要与时俱进。

爱上一个人的时候,总会有点害怕,怕得到他;怕失掉他。

weblogic out of space in CodeCache for adapters导致宕机

相关文章:

你感兴趣的文章:

标签云: