149

java.net.SocketException: Connection resetログに断続的なエラーが頻繁に表示 されます。Connection resetエラーが実際にどこから発生しているか、およびデバッグをどのように行うかについては不明です。

この問題は、送信しようとしているメッセージとは無関係のようです。メッセージは ではない connection reset by peerことに注意してください。

この例外の典型的な原因と、どのように進めればよいかについて何か提案はありますか?

代表的なスタック トレースを次に示します (com.companyname.mtix.smsはコンポーネントです)。

    java.net.SocketException: 接続のリセット
        java.net.SocketInputStream.read(SocketInputStream.java:168) で
        java.io.BufferedInputStream.fill(BufferedInputStream.java:218) で
        java.io.BufferedInputStream.read(BufferedInputStream.java:235) で
        org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77) で
        org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105) で
        org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115) で
        org.apache.commons.httpclient.HttpMethodBase.readStatusLine (HttpMethodBase.java:1832) で
        org.apache.commons.httpclient.HttpMethodBase.readResponse (HttpMethodBase.java:1590) で
        org.apache.commons.httpclient.HttpMethodBase.execute (HttpMethodBase.java:995) で
        org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry (HttpMethodDirector.java:397) で
        org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) で
        org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) で
        org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324) で
        com.companyname.mtix.sms.services.impl.message.SendTextMessage.sendTextMessage (SendTextMessage.java:127) で
        com.companyname.mtix.sms.services.MessageServiceImpl.sendTextMessage (MessageServiceImpl.java:125) で
        com.companyname.mtix.sms.services.remote.MessageServiceRemoteImpl.sendTextMessage (MessageServiceRemoteImpl.java:43) で
        sun.reflect.GeneratedMethodAccessor203.invoke (不明なソース) で
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で
        java.lang.reflect.Method.invoke(Method.java:585) で
        org.apache.axis.providers.java.RPCProvider.invokeMethod (RPCProvider.java:397) で
        org.apache.axis.providers.java.RPCProvider.processMessage (RPCProvider.java:186) で
        org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) で
        org.apache.axis.strategies.InvocationStrategy.visit (InvocationStrategy.java:32) で
        org.apache.axis.SimpleChain.doVisiting (SimpleChain.java:118) で
        org.apache.axis.SimpleChain.invoke (SimpleChain.java:83) で
        org.apache.axis.handlers.soap.SOAPService.invoke (SOAPService.java:453) で
        org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) で
        org.apache.axis.transport.http.AxisServlet.doPost (AxisServlet.java:699) で
        javax.servlet.http.HttpServlet.service(HttpServlet.java:709) で
        org.apache.axis.transport.http.AxisServletBase.service (AxisServletBase.java:327) で
        javax.servlet.http.HttpServlet.service(HttpServlet.java:802) で
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:252) で
        org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:173) で
        com.companyname.mtix.sms.http.filters.NoCacheFilter.doFilter (NoCacheFilter.java:63) で
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:202) で
        org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:173) で
        com.companyname.mtix.sms.http.filters.MessageFilter.doFilter(MessageFilter.java:53) で
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:202) で
        org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:173) で
        org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:61) で
        org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77) で
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:202) で
        org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:173) で
        org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46) で
        org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:202) で
        org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:173) で
        org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:213) で
        org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:178) で
        org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:126) で
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) で
        org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:541) で
        org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:107) で
        org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:148) で
        org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) で
        org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) で
        org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket (PoolTcpEndpoint.java:527) で
        org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt (LeaderFollowerWorkerThread.java:80) で
        org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) で
        java.lang.Thread.run(Thread.java:595) で
    

このコンポーネントは、Tomcat で実行される Web アプリケーションであり、SMS メッセージを送信するサード パーティの Web サービスを呼び出します。例外がスローされるコードの行は、以下のコード スニペットの最後の行です。

String aggregatorResponse = null;
HttpClient httpClient = prepareHttpClient( username, password );
PostMethod postMethod = preparePostMethod( textUrl );

try {
  SybaseTextMessageBuilder builder = new SybaseTextMessageBuilder();
  URL notifyUrl = buildNotificationUrl( textMessage, codeSetManager );
  String smsRequestDocument = builder.buildTextMessage( textMessage, notifyUrl );
  LOG.debug( "Sybase MT document created as: \n" + smsRequestDocument );

  postMethod.setRequestEntity( new StringRequestEntity( smsRequestDocument ) );
  LOG.debug( "commiting SMS to aggregator: " + textMessage.toString() );
  int httpStatus = httpClient.executeMethod( postMethod );
4

14 に答える 14

66

SocketException の javadoc は、それが

TCP エラーなど、基礎となるプロトコルにエラーがあることを示すためにスローされます

あなたの場合、接続のサーバー側によって接続が閉じられたようです。これは、送信しているリクエストの問題か、リクエスト側の問題である可能性があります。

デバッグを支援するために、 Wiresharkなどのツールを使用して実際のネットワーク パケットを表示できます。また、Web サービスのテストに使用できる Java コードの代替クライアントはありますか? これが成功した場合、Java コードのバグを示している可能性があります。

Commons HTTP Client を使用しているため、Common HTTP Client Logging Guideを参照してください。これにより、HTTP レベルでリクエストをログに記録する方法がわかります。

于 2009-02-25T11:30:57.110 に答える
51

このエラーはあなたの側で発生し、反対側では発生しません。反対側が接続をリセットした場合、例外メッセージには次のように表示されます。

java.net.SocketException reset by peer

原因は、内部の接続HttpClientが古いことです。SSL の古い接続を確認しても、このエラーは修正されません。解決策: クライアントをダンプして再作成します。

于 2009-07-29T01:39:01.757 に答える
18

Glassfish3 サーバーにデプロイされた Web サービスにアクセスしようとしてこの問題が発生した場合は、http-thread-pool 設定を調整することをお勧めします。これにより、多数の同時スレッドが Web サービスを呼び出していたときに発生した SocketExceptions が修正されました。

  1. 管理コンソールに移動
  2. 「構成」->「サーバー構成」->「スレッドプール」->「http-thread-pool」に移動します。
  3. 設定「最大スレッド プール サイズ」を 5 から 32 に変更します。
  4. 設定「最小スレッド プール サイズ」を 2 から 16 に変更します。
  5. グラスフィッシュを再起動します。
于 2011-10-21T10:41:23.563 に答える
12

私もこのエラーに出くわしました。私の場合、問題は TLS1.0 をサポートするJRE6を使用していたことです。サーバーは TLS1.2 のみをサポートしていたため、このエラーがスローされました。

于 2014-08-28T12:07:58.707 に答える
9

私の場合、これは、TomcatがmaxHttpHeaderSize特に複雑なSOLRクエリに対して不十分に設定されていたためです。

これが誰かを助けてくれることを願っています!

于 2013-01-22T19:17:05.710 に答える
5

私はいつもこのエラーを受け取り、それを正常だと考えています。

相手側が既に電話を切ったときに、一方が読み込もうとしたときに発生します。したがって、プロトコルによっては、これが問題を示す場合と示さない場合があります。クライアント コードがサーバーに対してハングアップすることを明確に示している場合、クライアントとサーバーの両方が同時にハングアップする可能性があり、このメッセージは発生しません。

私が自分のコードを実装する方法は、クライアントがさよならを言わずに電話を切ることです。その後、サーバーはエラーをキャッチして無視できます。HTTP のコンテキストでは、プロトコルの 1 つのレベルでは接続ごとに複数の要求が許可され、他のレベルでは許可されないと思います。

したがって、一方が他方にハングアップし続ける可能性があることがわかります。あなたが受け取っているエラーが著作権侵害の問題であるとは思えません。ログ ファイルがいっぱいになるのを防ぐために、単純にキャッチすることができます。

于 2010-06-27T22:36:13.930 に答える
4

このエラーは、ソケット経由で応答が返される前にクライアントがソケット接続を閉じたときに、サーバー側で発生します。Web アプリのシナリオでは、手動で作成できるため、これらすべてが危険というわけではありません。たとえば、応答が取得される前にブラウザーを終了することによって。

于 2009-02-25T11:35:41.730 に答える
2

例外は、ソケットが反対側から予期せず閉じられたことを意味します。Web サービスを呼び出しているため、これは発生しないはずです。ほとんどの場合、Web サービスのバグをトリガーするリクエストを送信しています。

そのような場合は、リクエスト全体をログに記録してみて、異常に気付くかどうかを確認してください。それ以外の場合は、Web サービス プロバイダーに連絡して、ログに記録された問題のある要求を送信してください。

于 2009-02-25T11:23:53.397 に答える
1

このスレッドが少し古いことは承知していますが、2 セント追加したいと思います。リリースの直後に、同じ「接続リセット」エラーが発生しました。

根本的な原因は、apacheサーバーが展開のために停止したことです。サードパーティのトラフィックはすべて通過apacheし、ダウンしているため接続リセット エラーが発生していました。

于 2016-09-14T12:19:58.597 に答える
0

読み取ろうとしていたテキスト ファイルに、ファイアウォールのウイルス対策シグネチャと一致する文字列が含まれていたときに、このエラーが発生しました。

于 2017-11-05T20:31:07.363 に答える
-1

私もまさにそのエラーを受け取っていました: Connection reset by peer. メソッドの実行時に、Spring の REST テンプレートによって例外が発生していましたpostForObject()。私にとって問題は、HTTP URL リクエストが長すぎることでした。したがって、最初に生成された URL が本来あるべきものであるかどうかを確認し、サーバーが本当にその長さのリクエストを処理できる必要がある場合は、サーバーの構成に移動して、URL リクエストのデフォルトの許容長を上げてください。

これで問題は解決しましたが、注意してください。URL 要求の最大長が固定されているため、一部のインターネット ブラウザー、特に古いブラウザーではアプリケーションが実行されない場合があります。

それが役に立てば幸い...

于 2011-09-28T14:40:41.790 に答える
-1

接続しようとしたポートが閉じられていたため、このエラーが発生していました。

于 2018-11-28T22:04:34.137 に答える