【发布时间】:2012-04-18 18:16:28
【问题描述】:
我有一个 Tomcat 应用程序正在运行,由于某种原因,我的一个 servlet 被搁置,而所有其他 servlet 在执行请求时响应。
我的 Tomcat 连接器配置:
<Connector port="8008" protocol="HTTP/1.1"
maxThreads="50" minSpareThreads="5" maxSpareThreads="50"
enableLookups="false" acceptCount="100"
connectionTimeout="20000"
redirectPort="8443"
compression="off"
allowTrace="true"
compressionMinSize="128"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/x-gwt-rpc; charset=utf-8,application/json; charset=utf-8,application/javascript" />
在执行很长的请求时,我的 GWT RPC servlet 不断响应。但是我在 GWT 之外创建了一个 servlet(即一个普通的旧 servlet),当我向这个 servlet 发送请求时,它不会响应,直到长 GWT 请求结束。它实际上根本没有开始执行(我添加了日志以查看它是否真正开始执行,直到日志 gwt 请求结束才开始执行)。
如何调试Tomcat实例的线程池/入站请求队列?
【问题讨论】:
-
您是否使用 IDE,例如 Eclipse 或 NetBeans?如果是这样,您可以在打开调试的情况下启动 Tomcat,然后远程附加并在任何您想要的地方设置断点。您还需要拥有 Tomcat 源。但是,如果您没有远程调试经验,那么如何设置它可能超出了 SO 答案。
-
在非 gwt servlet 请求等待查看它在做什么时执行线程转储。
-
听从吉姆·加里森的建议。这是正确和通常的方式。做起来不是什么难事。 Jim 应该将他的评论作为答案,然后您可以选择它作为答案。