【Tomcat】設定ファイル server.xml ~ Valve 編~

□ Valve

Valve(バルブ)。ぱっと見、Valueかと思った
 * 親コンポーネントへのリクエストをフィルタし、処理を行う

参考文献

https://thinkit.co.jp/free/article/0708/2/8?page=0%2C1

■ Stuck Thread Detection Valve

org.apache.catalina.valves.StuckThreadDetectionValve (From Tomcat7)
 * 長時間処理しているリクエストを検知する

設定例

<Valve
 className="org.apache.catalina.valves.StuckThreadDetectionValve"
 threshold="5" />
`属性`説明備考
className「org.apache.catalina.valves.StuckThreadDetectionValve」を設定
threshold閾値[秒]。「0」なら非活性。デフォルト:600[秒]。backgroundProcessorDelayよりも大きい方がいい
interruptThreadThreshold中断する際の閾値[秒]。「-1」なら非活性。interruptThreadThreshold >= thresholdにする必要有
サンプルテストJSP / longsleep.jsp
<html>
<body>
Sleep...
<%
 Thread.sleep(15000);
 %>
<hr>
</font>
</body>
</html>
出力結果例 / catalina.YYYY-MM-dd.log
21-Jan-2018 21:49:36.219 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.valves.StuckThreadDetectionValve.notifyStuckThreadDetected Thread [http-nio-8080-exec-8] (id=[35]) has been active for [11,913] milliseconds (since [18/01/21 21:49]) to serve the same request for http://127.0.0.1:8080/examples/jsp/longsleep.jsp and may be stuck (configured threshold for this StuckThreadDetectionValve is [5] seconds). There is/are [1] thread(s) in total that are monitored by this Valve and may be stuck.
 java.lang.Throwable
	at java.lang.Thread.sleep(Native Method)
	at org.apache.jsp.jsp.longsleep_jsp._jspService(longsleep_jsp.java:113)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at psiprobe.Tomcat90AgentValve.invoke(Tomcat90AgentValve.java:40)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
	at org.apache.catalina.valves.StuckThreadDetectionValve.invoke(StuckThreadDetectionValve.java:206)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1374)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:744)

21-Jan-2018 21:49:46.246 警告 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.valves.StuckThreadDetectionValve.notifyStuckThreadCompleted Thread [http-nio-8080-exec-8] (id=[35]) was previously reported to be stuck but has completed. It was active for approximately [15,790] milliseconds.

公式サイト

[[http://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Stuck_Thread_Detection_Valve]]

参考文献

http://benzaiten.dyndns.org/roller/ugya/entry/tomcat7-hangup
https://qiita.com/tamura__246/items/dae31a6a7e24c756b756
http://d.hatena.ne.jp/Kazuhira/20121014/1350217927
http://se-bikou.blogspot.jp/2017/06/tomcatstuckthreaddetectionvalve.html

■ Error Report Valve

 * HTTPエラー時のエラーページの設定

公式サイト

[[http://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Error_Report_Valve]]

参考文献

http://www.tec-q.com/note/2007/03/tomcat.html

Access Log Valve

 * アクセスログを出力する
 * デフォルトで既に追加されている

公式サイト

[[http://tomcat.apache.org/tomcat-8.5-doc/config/valve.html#Access_Log_Valve]]

参考文献

http://www.m-bsys.com/code/tomcat-accesslog

関連記事

 * 以下の関連記事の「■ Tomcatアクセスログの処理時間を出力するには」を参照のこと。
https://blogs.yahoo.co.jp/dk521123/33222763.html


関連記事

Tomcat】設定ファイル server.xml ~ Connector / Attributes 編~

https://blogs.yahoo.co.jp/dk521123/34658624.html

Tomcat】設定ファイル server.xml ~ Connector / Special Features 編~

https://blogs.yahoo.co.jp/dk521123/35255676.html

Tomcat のスレッド制御 ~ Connectorタグ / Executorタグ ~

https://blogs.yahoo.co.jp/dk521123/37307732.html

TomcatTomcat ログあれこれ

https://blogs.yahoo.co.jp/dk521123/33222763.html