TomcatやJBossにおけるjava.lang.ArrayIndexOutOfBoundsException:8192 エラーの原因及びその解決方法

2011/10/31 23:16Update
TAGS: 8192 | Java | Tomcat | JBoss | サーバ | ArrayIndexOutOfBoundsException

TomcatやJBossなどのアプリケーションサーバでのArrayIndexOutOfBoundsException:8192エラー時の原因及びその対策。

エラー例:

java.lang.ArrayIndexOutOfBoundsException: 8192
at org.apache.coyote.ajp.AjpMessage.appendByte(AjpMessage.java:144)
at org.apache.coyote.ajp.AjpMessage.appendString(AjpMessage.java:261)
at org.apache.coyote.ajp.AjpMessage.appendBytes(AjpMessage.java:178)
at org.apache.coyote.ajp.AjpProcessor.prepareResponse(AjpProcessor.java:965)
at org.apache.coyote.ajp.AjpProcessor.action(AjpProcessor.java:497)
at org.apache.coyote.Response.action(Response.java:183)
...

原因:
考えられる一つの原因として、
HttpHeaderSize(HTTPヘッダサイズ)は8192を超えている

解決策
TomcatやJBossのserver.xmlを開き、
maxHttpHeaderSize
を定義するところに、

    <Connector port="8080" address="${jboss.bind.address}"
         maxThreads="250" maxHttpHeaderSize="8192"
         emptySessionPath="true" protocol="HTTP/1.1"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" />

maxHttpHeaderSize="81920"
とか適当なサイズに変更してサーバを再起動すれば直ると思います。

または、AJP connectorの場合、
maxHttpHeaderSizeではなく、packetSizeを定義します。

例:
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               packetSize="81920"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

.

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation