ben*_*y23 44
使用Tomcat 7,您可以添加StuckThreadDetectionValve,它将使您能够识别"卡住"的线程.您可以在要检测的应用程序的Context元素中设置阀门:
<Context ...>
...
<Valve
className="org.apache.catalina.valves.StuckThreadDetectionValve"
threshold="60" />
...
</Context>
Run Code Online (Sandbox Code Playgroud)
这将在tomcat日志中为任何花费超过60秒的线程写入一个WARN条目,这将使您能够识别应用程序并禁止它们,因为它们有问题.
基于源代码,您可以编写自己的阀门来尝试停止线程,但是这会对线程池产生影响,并且没有可靠的方法在Java中停止线程而没有该线程的协作...
Mat*_*ell 23
如果您试图阻止请求运行太长时间,那么在Tomcat中设置超时对您没有帮助.正如Chris所说,您可以为Tomcat设置全局超时值.但是,从Apache Tomcat Connector - Generic HowTo Timeouts,请参阅Reply Timeout部分:
JK还可以在请求回复时使用超时.此超时不会测量响应的完整处理时间.相反,它控制,允许连续响应数据包之间的时间.
在大多数情况下,这是人们真正想要的.考虑例如长时间运行的下载.您将无法设置有效的全局回复超时,因为下载可能会持续很长时间.大多数应用程序在开始返回响应之前的处理时间有限.对于这些应用程序,您可以设置显式回复超时.与回复超时不协调的应用程序是批量类型应用程序,数据仓库和报告应用程序,预计会观察到较长的处理时间.
如果JK中止等待响应,因为响应超时被触发,则无法停止后端处理.虽然您可以在Web服务器中释放处理资源,但请求将继续在后端运行 - 无需任何方式在响应超时触发后发回结果.
因此,Tomcat将检测到servlet在超时内没有响应并将向用户发回响应,但不会停止线程运行.我认为你不能实现你想做的事.
Chr*_*is 10
您可以在server.xml中设置默认超时
<Connector URIEncoding="UTF-8"
acceptCount="100"
connectionTimeout="20000"
disableUploadTimeout="true"
enableLookups="false"
maxHttpHeaderSize="8192"
maxSpareThreads="75"
maxThreads="150"
minSpareThreads="25"
port="7777"
redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
127009 次 |
最近记录: |