立即java.net.SocketException来自服务器的文件意外结束

问题描述

我有以常规方式创建的基于cxf的Web客户端:

proxy = JAXRSClientFactory.create(host,clientInterfaceClass,providers,isThreadSafe = true);

此客户端在Nginx负载均衡器背后调用服务

在每秒一次加载数百个请求的过程中,我遇到异常:

Caused by: java.net.socketException: Unexpected end of file from server
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:851)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1593)
...

关键点在于,这种故障几乎是在发起请求后的1-2ms内立即发生的,因此很可能没有与Nginx的实际连接,更不用说服务本身了(日志没有证据表明我们已经到达任何服务器)

以线程安全的方式创建代理,并在每次请求时重置客户端:

WebClient.client(service).reset();

发布Java simple code: java.net.SocketException: Unexpected end of file from server 尽管我不认为这是我的情况,因为它失败的速度非常快,但它对此异常的本质给出了相当全面的解释。

我编写了一个测试,该测试可模拟带有许多并行请求的产品,例如负载和轰击服务。不走运,w / p

因此,问题是:还有其他可能引发此异常的情况吗?也许打开的文件数之类。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)