Grails ConfigSlurper内存泄漏

时间:2013-01-07 16:53:45

标签: tomcat grails servlets memory-leaks

我参与了Grails(2.1.0)项目,在完成后发现Tomcat内存不足。经过不太复杂的调查后,我发现以下代码行导致内存泄漏:

def servletContext = ServletContextHolder.servletContext
def config = new ConfigSlurper().parse(servletContext.getResource('/WEB-INF/config.groovy').text)

一旦我从代码执行中删除了这两行,项目就会在tomcat上运行并且内存使用稳定。但是,如果我将这两条线带回来,内存使用量会慢慢增加。

我不明白为什么那两行引起内存泄漏?他们有什么神奇之处?我如何解决它?我需要访问WEB-INF文件夹中的资源。

谢谢。

1 个答案:

答案 0 :(得分:2)

你在评论中说

  

代码在Quartz计划类中。一旦计划的工作执行,我就会反复解析它。

每次执行ConfigSlurper.parse时,都必须编译Groovy类。由于您正在解析固定脚本(来自/WEB-INF/config.groovy),因此每次都会得到相同的结果,因此您应该尝试找到一些解析文件的方法,并将生成的ConfigObject存储在您的某处。 Quartz作业可以访问它。