我参与了Grails(2.1.0)项目,在完成后发现Tomcat内存不足。经过不太复杂的调查后,我发现以下代码行导致内存泄漏:
def servletContext = ServletContextHolder.servletContext
def config = new ConfigSlurper().parse(servletContext.getResource('/WEB-INF/config.groovy').text)
一旦我从代码执行中删除了这两行,项目就会在tomcat上运行并且内存使用稳定。但是,如果我将这两条线带回来,内存使用量会慢慢增加。
我不明白为什么那两行引起内存泄漏?他们有什么神奇之处?我如何解决它?我需要访问WEB-INF文件夹中的资源。
谢谢。
答案 0 :(得分:2)
你在评论中说
代码在Quartz计划类中。一旦计划的工作执行,我就会反复解析它。
每次执行ConfigSlurper.parse
时,都必须编译Groovy类。由于您正在解析固定脚本(来自/WEB-INF/config.groovy
),因此每次都会得到相同的结果,因此您应该尝试找到一些解析文件的方法,并将生成的ConfigObject
存储在您的某处。 Quartz作业可以访问它。