0

AJP プロトコルを使用すると J BOSS 6.0.0 サーバーがクラッシュしました。以下の例外を継続的に表示するシステム。

2012-08-21 16:12:51,750 ERROR [org.apache.tomcat.util.net.JIoEndpoint] (ajp-0.0.0.0-8009-Acceptor-0) Socket accept failed: java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method) [:1.6.0_24]
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408) [:1.6.0_24]
at java.net.ServerSocket.implAccept(ServerSocket.java:462) [:1.6.0_24]
at java.net.ServerSocket.accept(ServerSocket.java:430) [:1.6.0_24]
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61) [:6.0.0.Final]
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:343) [:6.0.0.Final]
at java.lang.Thread.run(Thread.java:662) [:1.6.0_24]
4

2 に答える 2

0
  • システム内の fd の最大数を確認するには、cat /proc/sys/fs/file-max65535 の場合は問題ありませんが、200000 まで増やすことができます。
  • 1024を与えた私の側では、入力してulimitをチェックする'ulimit -n'ので、ファイル/ etc/security/limites.confでそれを増やして追加します:

    * soft nofile 2048

    * hard nofile 2048

最後に、入力することで fd を確認できますlsof -p xxx|wc -l

これらすべての説明は、 この問題に直面するたびに私の命を救うことから来ています。

于 2012-08-24T22:59:17.763 に答える
0

問題は、JBOSS サーバーの Server.xml に設定されている最大スレッドと connectionTimeout が原因です。

AJP プロトコルの connectionTimeout のデフォルト値は無限です。

したがって、connectionTimeout 値は 120000 (2 分) に設定されます。

そのため、問題 (開いているファイルが多すぎる) は再現されませんでした。デフォルト値ではなく、最適な構成設定を設定することを常にお勧めします。

この問題を支援するために、その他の構成変更がいくつか行われました。それらは、

ajp プロトコルの「最大スレッド数」の値が 1500 から 150 に変更されました。

「ulimit -n」の値が 1024 から 8192 に変更されました。

于 2012-09-27T06:39:37.227 に答える