0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GlassFishでjava.io.IOExceptionとなった時の対応方法

Last updated at Posted at 2020-05-21
  • 環境
    • Red Hat Enterprise Linux Server release 6.3 (Santiago)
    • java version "1.7.0_79"
    • GlassFish 4.1

事象 : GlassFishで大量データ処理中にjava.io.IOExceptionになった

[2020/05/21 17:41:07.805][656b5aef53f][][FATAL] - java.io.IOException: java.lang.InterruptedException
org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleRead(TCPNIOTransportFilter.java:92)
org.glassfish.grizzly.filterchain.TransportFilter.handleRead(TransportFilter.java:173)
org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
org.glassfish.grizzly.filterchain.DefaultFilterChain.read(DefaultFilterChain.java:351)
org.glassfish.grizzly.filterchain.FilterChainContext.read(FilterChainContext.java:695)
org.glassfish.grizzly.http.io.InputBuffer.blockingRead(InputBuffer.java:1119)
org.glassfish.grizzly.http.server.io.ServerInputBuffer.blockingRead(ServerInputBuffer.java:95)
org.glassfish.grizzly.http.io.InputBuffer.fill(InputBuffer.java:1143)
org.glassfish.grizzly.http.io.InputBuffer.read(InputBuffer.java:353)
org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:267)
org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:270)
sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
java.io.InputStreamReader.read(InputStreamReader.java:184)
java.io.BufferedReader.fill(BufferedReader.java:154)
java.io.BufferedReader.readLine(BufferedReader.java:317)
java.io.BufferedReader.readLine(BufferedReader.java:382)
...省略...

原因 : アプリケーションの実行時間がタイムアウトしたから

アプリケーションの実行時間を設定する設定configs.config.network-config.protocols.protocol.http.request-timeout-secondsを指定していないことが問題だった。

Glassfishのデフォルトのタイムアウトは15分です。
これは様々な状況で発生する可能性があります。
例えば、リクエストがタイムアウト時間内に応答を返さない長時間実行アクションを起動した場合、サーバへのリクエストがHTTPS経由で行われ、HTTP (またはその逆)しかサポートしていない場合、HTTP接続プールで利用可能な接続がもうない場合などです。
java - GRIZZLY0023 Glassfish warning - Stack Overflow

対応 : domain.xmlのhttp.request-timeout-secondsの設定をする

今回は、設定していないためタイムアウトが15分になっていたので無制限の「-1」に設定した。

domain.xml
  <configs>
    <config name="server-config">
      <network-config>
        <protocols>
          <protocol name="http-listener-1">
            <http max-post-size-bytes="20971520" default-virtual-server="server" max-connections="250" request-timeout-seconds="-1">

GlassFish管理画面(http://localhost:4848)で設定する場合は、
server-config > Network Config > Network Listeners > {対象のListener} > [HTTP]タブ > Request Timeout:
image.png

Glassfish 3.1.2から「-1」は設定できないらしいが設定したらjava.io.IOExceptionが発生しなくなった・・・でも管理画面で見ると初期値の900秒(15分)になっている・・・不思議

Unfortunately you can't set it to -1 to have no limit since Glassfish 3.1.2.
java - GRIZZLY0023 Glassfish warning - Stack Overflow

Payaraでもできるんだろうか?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?