Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java11HttpClient间歇性挂起_Java_Java Http Client - Fatal编程技术网

Java11HttpClient间歇性挂起

Java11HttpClient间歇性挂起,java,java-http-client,Java,Java Http Client,我正在使用Java11的HttpClient。客户端间歇性挂起,我不知道为什么--我不知道是什么导致挂起,也不知道如何重现它 用于构造客户端和请求的代码位于不同的位置,因此此摘要显示了它们的构造方式: //摘录1:构建客户端 私有HttpClient HttpClient=HttpClient.newBuilder() .connectTimeout(持续时间为秒(5)) .build(); //摘录2:构建请求 HttpRequest req=HttpRequest.newBuilder()

我正在使用Java11的
HttpClient
。客户端间歇性挂起,我不知道为什么--我不知道是什么导致挂起,也不知道如何重现它

用于构造客户端和请求的代码位于不同的位置,因此此摘要显示了它们的构造方式:

//摘录1:构建客户端
私有HttpClient HttpClient=HttpClient.newBuilder()
.connectTimeout(持续时间为秒(5))
.build();
//摘录2:构建请求
HttpRequest req=HttpRequest.newBuilder()
.GET()
.uri(…)
.标题(…)
.标题(…)
.超时(持续时间秒(5))
.build();
//摘录3:发送请求
HttpResponse resp=httpClient.send(req,BodyHandlers.ofString());
起初,我只知道我的服务挂起了——我不知道涉及到
HttpClient
。然后,我在后台线程中抛出了一个看门狗计时器,该线程持有对主工作线程的(弱)引用,这样,如果计时器过期,我就可以获得主工作线程正在执行的操作的堆栈跟踪。这给了我这个堆栈跟踪(五分钟后过期):

j.u.c.TimeoutException:null//我将线程的堆栈跟踪塞进了一个异常中,以便更好地处理Splunk
在j.i.m.不安全停车场(未知来源)
在j.u.c.l.锁支持公园(未知来源)
在j.u.c.Completable Future$信号机模块(未知来源)
在j.u.c.ForkJoinPool.managedBlock(未知来源)
在j.u.c.CompletableFuture.waitingGet(未知来源)
在j.u.c.CompletableFuture.get(未知来源)
at j.i.n.h.HttpClientImpl.send(未知来源)
在j.i.n.h.HttpClientFacade.send(未知源)
在c.a.x.d.c.MyClientClass.sendRequest(MyClientClass.java:163)中
在
此后,我看到在所有使用
HttpClient
的代码的不同部分中出现了一些超时,它们都产生了相同的堆栈跟踪

我知道有一些可以追溯到Java 9的
HttpClient
bug可能会导致挂起,但我们正在运行上个月的Java 11版本(IIRC),我读到的所有bug在那之前很久就已经修复了


关于什么可能导致这种情况,或者如何复制或进一步调试它,您有什么建议吗?

您能告诉我java--version的输出是什么吗?根据供应商的不同,某些修复程序可能已在不同的更新中进行了后端口。您还知道该请求是通过HTTP/1.1还是HTTP/2发出的吗?我还建议尝试使用JDK14(如果可能的话)或JDK15候选者进行复制。这里还有一个提到类似问题的例子。我使用的是
AdoptOpenJDK(build 11.0.7+10)
在更新到
AdoptOpenJDK(build 11.0.8+10)
之后,我就不再遇到这个问题了。你能告诉我
java--version
的输出是什么吗?根据供应商的不同,某些修复程序可能已在不同的更新中进行了后端口。您还知道该请求是通过HTTP/1.1还是HTTP/2发出的吗?我还建议尝试使用JDK14(如果可能的话)或JDK15候选者进行复制。这里还有一个提到类似问题的例子。我正在使用
采用OpenJDK(build 11.0.7+10)
在更新到
采用OpenJDK(build 11.0.8+10)