鉴于此堆栈跟踪代码段
引起:java.net.SocketException:软件导致连接中止:
java.net.SocketOutputStream.socketWrite0(本机方法)中的套接字写入错误
我试着回答以下问题:
关于#1:
Sun的JVM源代码不包含这个确切的消息,但我认为文本软件导致连接中止:套接字写入错误来自本机实现SocketOutputStream:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Run Code Online (Sandbox Code Playgroud)
关于#2
我的猜测是,它是在客户端终止连接之前,在获得完整响应之前引起的(例如,发送请求,但在获得完整响应之前,它已关闭/终止/脱机)
问题:
我需要证明这个堆栈跟踪是套接字客户端的"错误",并且服务器没有做任何事情来避免它.(除了捕获异常,或使用非Sun JVM SocketOutputStream,但两者都没有真正避免客户端终止的事实)
我试图从套接字读取时出现以下错误.我做了readInt()对InputStream,并且我得到这个错误.仔细阅读文档,这表明连接的客户端部分关闭了连接.在这种情况下,我是服务器.
我可以访问客户端日志文件并且它没有关闭连接,事实上它的日志文件建议我关闭连接.那么有人知道为什么会这样吗?还有什么要检查的?当有可能达到阈值的本地资源时,是否会出现这种情况?
我注意到我有以下几行:
socket.setSoTimeout(10000);
Run Code Online (Sandbox Code Playgroud)
就在之前readInt().这是一个原因(长篇故事),但只是好奇,是否存在可能导致指示错误的情况?我在我的IDE中运行了服务器,我碰巧让我的IDE卡在断点上,然后我注意到完全相同的错误开始出现在我自己的IDE中.
无论如何,只要提一下,希望不是红鲱鱼.:-(
我有一个基于Java的客户端(使用java 1.6.30),它打开了与Tomcat 7.0.26上部署的服务器的SSL连接.Tomcat使用的是Java 6,在server.xml中我配置了要使用的连接器sslProtocol="TLS".
我想知道使用的SSL版本是什么?是TLS1.0吗?TLS1.1?别的什么?
java.net.SocketException: Connection reset和之间有什么区别java.net.SocketException: Broken Pipe?
我想弄清楚这两个例外的原因是什么.我们的服务器上出现以下错误,基本上是基于SOAP的Web服务.当我尝试中止客户端调用我看到的异常是Broken pipe ...
以下是我们的堆栈跟踪,任何帮助表示赞赏!
2011-01-10 00:44:33,828 96893947 INFO [STDOUT] (http-0.0.0.0-8180-Processor25:) ERROR: ''
2011-01-10 00:44:33,829 96893948 INFO [STDOUT] (http-0.0.0.0-8180-Processor25:) Jan 10, 2011 12:44:33 AM com.sun.xml.rpc.server.http.JAXRPCS
ervletDelegate doGetDefault
SEVERE: JAXRPCSERVLET34: transformation failed : ClientAbortException: java.net.SocketException: Connection reset
JAXRPCSERVLET34: transformation failed : ClientAbortException: java.net.SocketException: Connection reset
at com.sun.xml.rpc.server.http.WSDLPublisher.handle(WSDLPublisher.java:109)
at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGetDefault(JAXRPCServletDelegate.java:185)
at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGet(JAXRPCServletDelegate.java:153)
at com.sun.xml.rpc.server.http.JAXRPCServlet.doGet(JAXRPCServlet.java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
--
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)
2011-01-10 00:44:33,829 96893948 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/soa].[UserService]] (http-0.0.0.0-81
80-Processor25:) Servlet.service() for servlet …Run Code Online (Sandbox Code Playgroud) 我正在使用Java在Linux(Ubuntu 10)64位服务器上从Amazon S3流式传输文件.
我为每个文件使用一个单独的线程,每个文件打开一个HttpURLConnection下载并同时处理每个文件的文件.
一切都很美妙,直到我达到一定数量的流(通常约2-300个并发流).在此之后的不规则点,几个(比如10个)线程将同时开始出现java.net.IOException: Connection reset错误.
我限制了下载速度,并且低于m1.large实例的250mbit/s限制.所有其他服务器方面的负载也很小(例如CPU,负载平均值和内存使用率都很好).
可能导致这种情况的原因,或者我如何追踪它?
善良的 Attn 版主:在将此查询标记为重复之前,请注意我已检查 - Link1、Link2、Link3并且无法解决该问题。我也相信上下文和错误与那些不同,因此在这里寻求帮助。
上下文:从 NSEIndia 网站下载 csv 文件到本地文件夹(注意:可以从其他随机网站下载 CSV 文件)。
问题:返回错误 - javax.net.ssl.SSLException:连接重置(完整错误粘贴在下面)
观察:我很困惑,因为我昨天遇到了同样的问题,但经过几次重试后,它奏效了。我没有更改代码或设置。
问题:有什么我可以做的,以确保在这个特定网站上看不到这个错误?
代码:
// Using FileUtils from -> import org.apache.commons.io.FileUtils;
try {
FileUtils.copyURLToFile(new URL("https://www.nseindia.com/content/fo/fo_mktlots.csv"),new File("D:\\Download\\t1.csv"));
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
错误:
javax.net.ssl.SSLException: Connection reset
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:324)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:262)
at java.base/sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1652)
at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1038)
at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:245)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:285)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:344)
at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:746)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:717)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1610) …Run Code Online (Sandbox Code Playgroud) 我有一个客户端服务器应用程序。在客户端(我无法访问客户端代码),间歇性地发生套接字异常,显示“ java.net.SocketException:连接重置”。它不是“java.net.SocketException:连接由对等方重置”。有了这些信息,我可以断定问题出在客户端吗?
我有一个问题从URL www.example.com/example.pdf通过代理下载文件并将其保存在java中的文件系统上.有没有人对这如何运作有所了解?如果我得到InputStream,我可以简单地将它保存到文件系统:
final ReadableByteChannel rbc = Channels.newChannel(httpUrlConnetion.getInputStream());
final FileOutputStream fos = new FileOutputStream(file);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
Run Code Online (Sandbox Code Playgroud)
但如何通过代理获取网址的输入流?如果我这样做:
SocketAddress addr = new InetSocketAddress("my.proxy.com", 8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
URL url = new URL("http://my.real.url.com/");
URLConnection conn = url.openConnection(proxy);
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at app.model.mail.crawler.newimpl.FileLoader.getSourceOfSiteViaProxy(FileLoader.java:167)
at app.model.mail.crawler.newimpl.FileLoader.process(FileLoader.java:220)
at app.model.mail.crawler.newimpl.FileLoader.run(FileLoader.java:57) …Run Code Online (Sandbox Code Playgroud) 我收到与此link1类似的错误。当我通过 REST 发布(客户端到服务器)一个小的 xml 时,一切正常。不幸的是,当连接持续时间超过 10/15 min时,我在发布一些更大的 xml 时遇到错误。(我认为这是某种超时)
我更正了链接 1 中提到的 SSL 证书 - 在我的情况下,configureClient() 方法与链接 1 中的解决方案相同。
我还添加了 System.setProperty("java.net.preferIPv4Stack" , "true"); - 有时它会解决连接重置
基本信息:
错误:javax.ws.rs.ProcessingException:java.net.SocketException:连接重置
方法:REST POST
Java版本:7
引擎:泽西2.x
方:客户
系统:Windows 7
我的客户:
System.setProperty("java.net.preferIPv4Stack" , "true");
RestMethodes restMethodes = new RestMethodes();
ClientConfig config = new ClientConfig();
config = config.property(ClientProperties.CONNECT_TIMEOUT, 0);
config = config.property(ClientProperties.READ_TIMEOUT, 0);
config.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
Client client = configureClient(config);
client.register(HttpAuthenticationFeature.basic(USER, PASS));
WebTarget target = client.target(SERVER_URL + "/bundles/assets");
Invocation.Builder responseInvocation = target.request(MediaType.APPLICATION_JSON); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用JMeter将请求发送到我在localhost上运行的应用程序,但由于java.net.SocketException,许多请求都失败了.我没有在控制台中看到任何异常.
我的代码如下:
try {
return myService.findItems(group);
} catch (NullPointerException n) {
n.printStackTrace();
} catch (HibernateException h) {
h.printStackTrace();
} catch (IOException i) {
i.printStackTrace();
}
return null;
Run Code Online (Sandbox Code Playgroud)
知识库
public LinkedHashMap findItems(String group) throws NullPointerException, HibernateException, IOException {
Session session = sessionFactory.getCurrentSession();
..... //request is sent to database
return items;
}
Run Code Online (Sandbox Code Playgroud)
我的JMeter配置的屏幕截图




我正在使用RequestBuilder花费太长时间的超时GWT请求:
RequestBuilder requestBuilder = _service.getStatistics(callback);
requestBuilder.setTimeoutMillis(5000);
try {
requestBuilder.send();
} catch (RequestException e) {
GWT.getUncaughtExceptionHandler().onUncaughtException(e);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法通知被调用的远程服务该调用在客户端超时并且应该被取消?
java ×10
sockets ×4
ssl ×3
connection ×2
networking ×2
amazon-s3 ×1
concurrency ×1
exception ×1
fileutils ×1
gwt ×1
gwt-rpc ×1
http ×1
ioexception ×1
jersey ×1
jmeter ×1
performance ×1
proxy ×1
rest ×1
spring-mvc ×1
sslexception ×1
stack-trace ×1
stream ×1
timeout ×1
tomcat ×1
web-services ×1