GCのタイミングでHTTPステータス200、0byteのレスポンスが返却されます。
** わかっていること **
- tomcatのEden領域の使用率が100%なって、GCが発生するタイミングにアクセスすると発生する。
- デプロイされたモジュール内の静的なコンテンツ(例えば404.htmlなど)にアクセスしても発生しない
- Actionクラス
やControllerを実行するようなアクセスの場合に発生する。 Struts2で作ったものも、Springで作ったものを発生する(フレームワークのせいではなさそう)- tomcatのcatalina.outに、0byteのレスポンスが発生した時に以下のエラーが出る。
java.lang.IllegalStateException: レスポンスをコミットした後でフォワードできません
GCのタイミングでアクセスするとしょうがないものなのでしょうか?
だれが0byteのレスポンスを返しているのかもわかっていません。
どこかで(勝手に)0byteのレスポンスを返してしまっているから、「レスポンスをコミットした後でフォワードできません」のエラーが出ている気がしています。
なにか確認すべきことや似た事象があれば教えてください。
よろしくお願いします。
java 1.6
tomcat 6.0.33
追記
tcpdumpを取得してみました。
HTTPステータスは200で、レスポンスBODYが存在しません。
Next Sequene number:136 で
841行目で正常に処理できたことが確認できると思います。
追記2
コールスタックを貼ります。
callStack
1java.lang.Thread#run 2org.apache.tomcat.util.net.JIoEndpoint$Worker#run 3org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler#process 4org.apache.coyote.http11.Http11Processor#process 5org.apache.catalina.connector.CoyoteAdapter#service 6org.apache.catalina.core.StandardEngineValve#invoke 7org.apache.catalina.valves.AccessLogValve#invoke 8org.apache.catalina.valves.ErrorReportValve#invoke 9org.apache.catalina.core.StandardHostValve#invoke 10org.apache.catalina.core.StandardContextValve#invoke 11org.apache.catalina.core.StandardWrapperValve#invoke 12org.apache.catalina.core.ApplicationFilterChain#doFilter 13org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 14org.seasar.extension.filter.EncodingFilter#doFilter 15org.apache.catalina.core.ApplicationFilterChain#doFilter 16org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 17XXXXXXXXXXXXXXXXXXXXXX.filter.XXXXXXXXXX.XXXXXXX#doFilter // フィルタA 18org.apache.catalina.core.ApplicationFilterChain#doFilter 19org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 20XXXXXXXXXXXXXXXXXXXXXX.filter.XXXXXXXXXX.XXXXXXX#doFilter // フィルタB 21org.apache.catalina.core.ApplicationFilterChain#doFilter 22org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 23org.seasar.framework.container.filter.S2ContainerFilter#doFilter 24org.apache.catalina.core.ApplicationFilterChain$#doFilter 25org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 26org.seasar.framework.container.hotdeploy.HotdeployFilter#doFilter 27org.apache.catalina.core.ApplicationFilterChain#doFilter 28org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 29org.seasar.struts.filter.RoutingFilter#doFilter 30org.seasar.struts.filter.RoutingFilter#forward 31org.apache.catalina.core.ApplicationDispatcher#forward 32org.apache.catalina.core.ApplicationDispatcher#doForward // 0bytの時はここでIllegalStateExceptionが発生 33org.apache.catalina.core.ApplicationDispatcher#processRequest 34org.apache.catalina.core.ApplicationDispatcher#invoke 35org.apache.catalina.core.ApplicationFilterChain#doFilter 36org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 37org.seasar.framework.container.filter.S2ContainerFilter#doFilter 38org.apache.catalina.core.ApplicationFilterChain#doFilter 39org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 40org.seasar.framework.container.hotdeploy.HotdeployFilter#doFilter 41org.apache.catalina.core.ApplicationFilterChain#doFilter 42org.apache.catalina.core.ApplicationFilterChain#internalDoFilter 43javax.servlet.http.HttpServlet#service 44javax.servlet.http.HttpServlet#service 45org.apache.struts.action.ActionServlet#doGet 46org.apache.struts.action.ActionServlet#process 47org.apache.struts.util.ModuleUtils#selectModule 48org.apache.struts.util.ModuleUtils#getModuleName 49org.apache.struts.util.ModuleUtils#getModuleName