1

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

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

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

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

谢谢你。

4

1 回答 1

2

你在评论中说

代码在 Quartz 调度类中。一旦计划的作业执行,我就会重复解析它。

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

于 2013-01-08T14:19:08.833 回答