エラー 20444 --- [o-8090-exec-221] chcommon.Exception.RRExceptionHandler : java.io.IOException: B

プロジェクトのシナリオ:

简单说明如下:
最近、集中的なユーザーが多く、同じインターフェイスが頻繁にリクエストされるため、システムがエラーを報告し、サービスを直接停止します。


問題の説明

提示:这里描述项目中遇到的问题:

エラーメッセージは次のとおりです。

 ERROR 20444 --- [o-8090-exec-221] c.h.common.exception.RRExceptionHandler  : java.io.IOException: Broken pipe

org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

原因分析:

ヒント: ここに問題の分析を入力します。

Caused by: java.io.IOException: Broken pipe
	at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
	at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
	at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
	at sun.nio.ch.IOUtil.write(IOUtil.java:65)
	at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:468)
	at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134)
	at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:105)
	at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:144)
	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1223)
	at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:743)
	at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:696)
	at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:686)
	at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:553)
	at org.apache.coyote.http11.filters.IdentityOutputFilter.flush(IdentityOutputFilter.java:117)
	at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:216)
	at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1149)
	at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:394)
	at org.apache.coyote.Response.action(Response.java:209)
	at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:295)
	... 108 common frames omitted

上記のエラー情報から、まず問題を分析します。
上記のエラーが発生する可能性があります。
(1) ユーザーがサーバー データを要求し、サーバーが突然動作を停止します。
(2). コネクションプール内のコネクションが多すぎて、設定した最大コネクション数を超えた場合 各コネクションの処理速度が遅すぎて処理できないため、コネクションが切断される (3) クライアントサーバー
データを要求し、サービス クライアントは正常に戻りますが、接続タイムアウトまたはその他の理由でクライアントが切断され、サーバーに戻りチャネルがなくなりました。
(4) リクエストメッセージとリターンパラメータが大きすぎるため、クライアントが勝手に接続を終了してしまいます。
(5) ファイルが大きすぎる:処理時間が長すぎる 実行時間が長い、または実行頻度が高いため、プログラムまたはサーバーがタイムアウトし、プロセスが直接終了します。
(6) コード内に無限ループ呼び出しがあるかどうか、データベース構成に問題があるか、JVM 構成が低すぎるか、JVM ガベージがリサイクルされていないか (7)、他のサービスへの異常な呼び出し、またはその他の理由によって引き起こされる可能性があるかどうかを検討します
。サービスがクエリを実行している間、ライブラリはロックされています。

解決:

解決:

1. データベース接続プールの数、つまり構成ファイルの max-active の値を増やします (
MaxActive、接続プール内のデータベース接続の最大数。制限がないことを示すには 0 に設定します)。

2. クライアントのタイムアウトを延長します。
(maxWait、接続を確立するための最大待機時間。この時間を超えると、例外が受信されます。制限がないことを示すには、-1 に設定します。)

3. コード内にネストされたループまたは無限ループが存在するかどうかを確認します。

3. 実行時にデータベーステーブルにデッドロックがないかどうかを確認します。

今回遭遇した問題は、インターフェース呼び出し時にデータベースにクエリを実行する際に、エンコード関連のデータテーブルでデッドロックが発生したことが原因でしたので、ここに記録しておきます。

おすすめ

転載: blog.csdn.net/YHLSunshine/article/details/131646614