Kita melihat sering tapi intermiten jawa.net.SocketException: Connection reset
kesalahan dalam log. Kami tidak yakin ke mana Koneksi reset
kesalahan sebenarnya datang dari, dan bagaimana untuk pergi tentang debugging.
Masalah ini tampaknya tidak berhubungan dengan pesan yang kita mencoba untuk mengirim.
Perhatikan bahwa pesan adalah tidak connection reset by peer
.
Saran tentang apa yang khas penyebab pengecualian ini mungkin, dan bagaimana kita bisa melanjutkan?
Berikut ini adalah wakil stack trace (com.companyname.mtix.sms
adalah komponen):
java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:235) at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77) at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105) at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115) at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832) at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324) at com.companyname.mtix.sms.services.impl.message.SendTextMessage.sendTextMessage(SendTextMessage.java:127) at com.companyname.mtix.sms.services.MessageServiceImpl.sendTextMessage(MessageServiceImpl.java:125) at com.companyname.mtix.sms.services.remote.MessageServiceRemoteImpl.sendTextMessage(MessageServiceRemoteImpl.java:43) at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397) at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186) at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453) at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at com.companyname.mtix.sms.http.filters.NoCacheFilter.doFilter(NoCacheFilter.java:63) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at com.companyname.mtix.sms.http.filters.MessageFilter.doFilter(MessageFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:61) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:595) </pre>
Kami adalah komponen aplikasi web, yang berjalan di bawah Tomcat, bahwa panggilan ketiga layanan Web pihak yang mengirimkan pesan SMS, jadi hal itu terjadi. Baris kode kita yang mendapat pengecualian dilemparkan dari adalah baris terakhir di potongan kode di bawah ini.
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 );
Awal untuk SocketException menyatakan bahwa itu adalah
Dilemparkan untuk menunjukkan bahwa ada kesalahan dalam protokol seperti TCP kesalahan
Dalam kasus anda, tampaknya bahwa koneksi telah ditutup oleh server ujung sambungan. Ini bisa menjadi masalah dengan permintaan anda mengirim atau masalah pada akhir mereka.
Untuk membantu debugging anda bisa melihat menggunakan alat seperti Wireshark untuk melihat sebenarnya paket-paket jaringan. Juga, ada alternatif klien untuk kode Java yang bisa anda gunakan untuk menguji layanan web? Jika ini berhasil, maka bisa menunjukkan bug dalam kode Java.
Seperti anda menggunakan Commons HTTP Client silahkan lihat di Umum Klien HTTP Penebangan Panduan. Ini akan memberitahu anda bagaimana untuk log permintaan di HTTP tingkat.
Kesalahan ini terjadi di sisi anda dan BUKAN sisi yang lain. Jika sisi lain me-reset koneksi, maka pengecualian pesan harus mengatakan:
java.net.SocketException reset by peer
Penyebabnya adalah koneksi dalam HttpClient
basi. Cek basi koneksi SSL tidak memperbaiki kesalahan ini. Solusi: dump klien anda dan menciptakan.
Jika anda mengalami hal ini mencoba untuk mengakses Web services digunakan pada Glassfish3 server, anda mungkin ingin untuk menyetel http-benang-renang pengaturan. Yang tetap SocketExceptions kita punya ketika banyak benang bersamaan memanggil layanan web.
Saya juga tersandung kesalahan ini. Dalam kasus saya, masalah saya menggunakan JRE6, dengan dukungan untuk TLS1.0. Server hanya didukung TLS1.2, jadi ini kesalahan dilemparkan.
Saya mendapatkan error ini semua waktu dan menganggapnya normal.
Hal itu terjadi ketika salah satu pihak mencoba untuk membaca ketika sisi lain telah digantung. Dengan demikian tergantung pada protokol ini mungkin atau mungkin tidak menetapkan masalah. Jika klien saya kode khusus yang menunjukkan ke server yang akan menutup, maka kedua klien dan server dapat menutup pada waktu yang sama dan pesan ini tidak akan terjadi.
Cara saya menerapkan kode saya adalah bagi klien untuk hanya menutup telepon tanpa mengucapkan selamat tinggal. Server kemudian dapat menangkap kesalahan dan mengabaikan hal itu. Dalam konteks HTTP, saya percaya satu tingkat dari protokol yang memungkinkan lebih dari satu permintaan per sambungan sementara yang lain tidak't.
Sehingga anda dapat melihat bagaimana berpotensi satu sisi bisa terus menggantung di sisi lain. Aku ragu kesalahan yang anda terima dari setiap bajak laut kepedulian dan anda hanya bisa menangkap hal itu untuk menjaga dari mengisi file log anda.
Kesalahan ini terjadi pada sisi server ketika klien menutup sambungan soket sebelum respon bisa kembali lebih dari soket. Dalam aplikasi web skenario tidak semua dari mereka adalah berbahaya, karena mereka dapat dibuat secara manual. Misalnya, dengan berhenti browser sebelum respon diambil.
Pengecualian berarti bahwa soket tertutup secara tiba-tiba dari sisi lain. Karena anda memanggil layanan web, hal ini seharusnya tidak terjadi - kemungkinan besar anda're mengirimkan permintaan yang memicu bug di layanan web.
Coba log seluruh permintaan dalam kasus tersebut, dan lihat apakah anda melihat sesuatu yang tidak biasa. Jika tidak, hubungi penyedia layanan web dan mengirim mereka masuk problematis permintaan.
Aku tahu thread ini sedikit tua, tapi ingin menambahkan saya 2 sen. Kita sama-sama "koneksi ulang" error setelah kami salah satu rilis.
Akar penyebab itu, kami apache
server dibawa turun untuk penyebaran. Semua pihak ketiga kami lalu lintas berjalan melalui apache
dan kita mendapatkan koneksi ulang kesalahan karena hal itu menjadi turun.
Ini adalah thread lama, tapi aku berlari ke jawa.net.SocketException: Connection reset
kemarin.
Server-side aplikasi yang telah pelambatan pengaturan diubah untuk memungkinkan hanya 1 koneksi pada satu waktu! Dengan demikian, kadang-kadang panggilan pergi melalui dan kadang-kadang tidak. Aku memecahkan masalah dengan mengubah pelambatan pengaturan.
Saya mendapatkan persis bahwa kesalahan juga: Connection reset by peer
. Pengecualian dibesarkan oleh musim Semi's SISANYA template setelah menjalankan postForObject()
metode. Bagi saya masalah itu terlalu panjang URL HTTP request. Jadi periksa dulu apakah URL yang dihasilkan adalah apa yang seharusnya dan, jika server anda benar-benar harus dapat menangani permintaan dari yang panjang, cukup pergi ke server's konfigurasi dan meningkatkan standar yang diizinkan panjang URL permintaan.
Yang memecahkan masalah bagi saya, tapi diketahui: aplikasi ini mungkin tidak berjalan di beberapa browser internet, terutama orang-orang tua, karena mereka telah diperbaiki max panjang URL permintaan.
Semoga membantu...