2

每隔一段时间,在不到一秒钟的时间里,我在尝试获取特定请求的发布数据时会出现读取超时。这对我来说很奇怪,这会发生,我想知道是否有人以前见过。这发生在公共生产 Web 应用程序中,并且在一天中的随机时间发生大约 8 个实例(每个实例持续一秒或更短,看到 1 到 15 个读取超时)。这是堆栈跟踪的相关部分:

Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:751)
    at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:781)
    at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
    at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:710)
    at org.apache.coyote.Request.doRead(Request.java:428)
    at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:304)
    at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
    at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:327)
    at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:162)
    at com.offers.util.OffersHttpServletRequest.popuplateReqBytes(OffersHttpServletRequest.java:117)
    at com.offers.util.OffersHttpServletRequest.getPostData(OffersHttpServletRequest.java:64)
    at com.util.TrackAction.getPostData(TrackAction.java:148)
    ... 40 more

---这种困惑已在评论中得到解答---

请注意,OffersHttpServletRequest 是一个覆盖某些方法(getPostData、getInputStream、isSecure、getReader、getRequestURL、getProtocol)的类 - 但是 popuplateReqBytes 调用 super.getInputStream()而不是覆盖的 getInputStream 方法。所以我对堆栈跟踪如何从 ServletRequestWrapper.getInputStream 返回到 OffersHttpServletRequest.getInputStream 有点困惑。

---结束混乱---

- - 更新 - -

根据 jtahlborn 的观察进行更改后更改了堆栈跟踪。改变并没有解决问题。

4

0 回答 0