1

私は Grails ( 2.1.0 ) プロジェクトに取り組みましたが、完了後に Tomcat がメモリ不足であることがわかりました。あまり洗練されていない調査の結果、次のコード行がメモリリークを引き起こしていることがわかりました。

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

コード実行からこれらの 2 行を削除すると、プロジェクトは tomcat で安定したメモリ使用量で実行されます。ただし、これらの 2 行を元に戻すと、メモリ使用量が徐々に増加します。

これらの2行がメモリリークを引き起こしている理由がわかりませんか? 彼らの何がそんなに魔法なのですか?どうすれば修正できますか?WEB-INF フォルダー内のリソースにアクセスする必要があります。

ありがとうございました。

4

1 に答える 1

2

あなたはコメントで言う

コードは Quartz スケジュール クラスにあります。スケジュールされたジョブが実行されると、繰り返し解析しています。

実行するたびConfigSlurper.parseに、Groovy クラスをコンパイルする必要があります。固定スクリプト (から) を解析しているため、毎回同じ結果が得られるため、ファイルを一度だけ解析し、結果を Quartz ジョブがアクセスできる場所に/WEB-INF/config.groovy保存する方法を見つけてください。ConfigObject

于 2013-01-08T14:19:08.833 に答える