特定のリクエストの投稿データを取得しようとすると、時々、1 秒未満のスパンで読み取りタイムアウトが発生します。これが起こることは私にとって非常に奇妙であり、誰かがこれを前に見たことがあるかどうか疑問に思っています. これは、公開されている実稼働 Web アプリケーションで発生しており、1 日に約 8 つのインスタンスがランダムに発生します (各インスタンスは 1 秒以下で、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 は、オーバーライドされた getInputStream メソッドではなく、super.getInputStream() を呼び出します。そのため、スタック トレースが ServletRequestWrapper.getInputStream から OffersHttpServletRequest.getInputStream に戻る方法について少し混乱しています。
--- 混乱を終わらせる ---
- - アップデート - -
jtahlborn の観察に基づいて変更を行った後、スタック トレースを変更しました。変更しても問題は解決しませんでした。