LoginSignup
16
17

More than 5 years have passed since last update.

jsp でヒープ使用量が大きい場合の対処法

Posted at

Java Servlet + jsp 環境で実運用した結果、日に日にヒープ使用量が増え、fullGCしても減らない、
という場合は、web.xml の JspServlet の設定の見直しをおすすめします。

JspServlet のパラメータ development はデフォルトが true になっています。
これは jasper (JSPエンジン)を開発モードにするか否か、というパラメータになっており、
詳しくは調べていないですがこれを true にすると、
なんらかのエラーが起きた時に詳細情報を出力するためにヒープ上に情報を保持しておくらしいです。

Tomcat をインストール直後の web.xml を見てみると以下の様な設定になっています。

  <servlet>
      <servlet-name>jsp</servlet-name>
      <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
      <init-param>
          <param-name>fork</param-name>
          <param-value>false</param-value>
      </init-param>
      <init-param>
          <param-name>xpoweredBy</param-name>
          <param-value>false</param-value>
      </init-param>
      <load-on-startup>3</load-on-startup>
  </servlet>

development パラメータがないので、値としては true が設定されているものとして動作します。

development パラメータのことを知らないと、このまま実運用してしまいそうで怖いです。
必須パラメータにしてくれればいいのに・・・。

これを以下の様に書き換えると、ヒープがどんどん増えていく現象は解消されます。

  <servlet>
     <servlet-name>jsp</servlet-name>
     <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
     <init-param>
         <param-name>fork</param-name>
         <param-value>false</param-value>
     </init-param>
     <init-param>
         <param-name>xpoweredBy</param-name>
         <param-value>false</param-value>
     </init-param>
     <init-param>
         <param-name>development</param-name>
         <param-value>false</param-value>
     </init-param>
     <init-param>
         <param-name>checkInterval</param-name>
         <param-value>60</param-value>
     </init-param>

  </servlet>

checkInterval というパラメータが増えていますが、
development を false に設定した場合は、jsp の逐次コンパイルをしてくれません。
そのため checkInterval で、jsp のコンパイル間隔を設定する必要があります。
(development = false と checkInterval はセットです)
上記の設定だと、jsp ファイルのリコンパイルを60秒間隔でおこなう、という設定になります。

16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17