Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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
Java Jetty http2客户端请求无限期挂起_Java_Jetty_Haproxy_Http2_Jetty 9 - Fatal编程技术网

Java Jetty http2客户端请求无限期挂起

Java Jetty http2客户端请求无限期挂起,java,jetty,haproxy,http2,jetty-9,Java,Jetty,Haproxy,Http2,Jetty 9,我们正在尝试实现一个http2 jetty客户端,它与我们的远程服务器进行多路连接。我们的节目如下 Security.addProvider(new OpenSSLProvider());//Conscrypt for ALPN support in jdk8 SslContextFactory sslContextFactory = new SslContextFactory.Client(true); sslContextFactory.setProvider("Conscrypt");

我们正在尝试实现一个http2 jetty客户端,它与我们的远程服务器进行多路连接。我们的节目如下

Security.addProvider(new OpenSSLProvider());//Conscrypt for ALPN support in jdk8
SslContextFactory sslContextFactory = new SslContextFactory.Client(true);
sslContextFactory.setProvider("Conscrypt");

sslContextFactory.setProtocol("TLSv1.3");//Use TLSv1.3
HTTP2Client http2Client = new HTTP2Client();
http2Client.setConnectTimeout(5000);
http2Client.setIdleTimeout(30000);

org.eclipse.jetty.client.HttpClient http2HttpClient = new org.eclipse.jetty.client.HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory);
http2HttpClient.setConnectTimeout(5000);
http2HttpClient.setIdleTimeout(30000);
http2HttpClient.start();
http2HttpClient.addBean(sslContextFactory);
http2HttpClient.start();

org.eclipse.jetty.client.api.Request request = http2HttpClient.POST(locationurl+locationposturl);
request.header(HttpHeader.CONTENT_TYPE, "application/json");//No I18N
request.header("Pragma", "no-cache");
request.header("Custom", customheaderName);
request.header("Secure", secureHeader);
request.header("protocol", "h2");
request.content(new StringContentProvider(myXMLRequest,"utf-8"));

request.timeout(420, TimeUnit.SECONDS);
request.idleTimeout(30, TimeUnit.SECONDS);

ContentResponse response = request.send();
if (response != null && (response.getStatus() >= 200 && response.getStatus() < 400)) {
int statuscode=response.getStatus();
byte [] wbresponse = response.getContent();
}
Security.addProvider(新的OpenSSLProvider())//用于jdk8中ALPN支持的Conscrypt
SslContextFactory SslContextFactory=新的SslContextFactory.Client(true);
setProvider(“Conscrypt”);
setProtocol(“TLSv1.3”)//使用TLSv1.3
HTTP2Client HTTP2Client=新的HTTP2Client();
http2Client.setConnectTimeout(5000);
http2Client.setIdleTimeout(30000);
org.eclipse.jetty.client.HttpClient-http2HttpClient=new org.eclipse.jetty.client.HttpClient(新的HttpClientTransportOverHTTP2(http2Client),sslContextFactory);
http2HttpClient.setConnectTimeout(5000);
http2HttpClient.setIdleTimeout(30000);
http2HttpClient.start();
http2HttpClient.addBean(sslContextFactory);
http2HttpClient.start();
org.eclipse.jetty.client.api.Request-Request=http2HttpClient.POST(locationurl+locationpostrl);
request.header(HttpHeader.CONTENT_类型,“application/json”)//无I18N
请求头(“Pragma”,“无缓存”);
请求标题(“自定义”,customheaderName);
请求标头(“安全”,secureHeader);
请求标题(“协议”、“h2”);
内容(新的StringContentProvider(myXMLRequest,“utf-8”);
请求超时(420,时间单位秒);
请求.空闲超时(30,时间单位.秒);
ContentResponse=request.send();
if(response!=null&&(response.getStatus()>=200&&response.getStatus()<400)){
int statuscode=response.getStatus();
字节[]wbresponse=response.getContent();
}
我们使用同步调用和conscrypt(安全提供者)来支持jdk8中的ALPN,并使用TLSv1.3。我们能够成功地向远程位置发出http2请求。但是我们面临一个问题,在我们重新启动服务器之前,大多数线程都会无限期地挂起。我们在两端使用tomcat 9.x,每个远程服务器都有专用的HAproxy(用作h2/ssl终端)

客户: 使用的安全提供程序:Conscrypt-2.1.0,JAVA:JDK 8,tomcat:9.0.21,Jetty:9.4.19

服务器: JAVA:JDK 11,tomcat:9.0.21,Haproxy:2.0

我检查了jetty文档是否有可能超时,我们已经配置了所有超时,但仍然不知道为什么线程无限期挂起。我们有相同的线程转储

34534543535345435(DNS) - Tue Aug 13 04:40:06 PDT 2019" #1081 prio=5 os_prio=0 tid=0x00007f93e40d3000 nid=0xd820 waiting on condition [0x00007f91c7cfa000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for  <0x00000000d9648be0> (a java.util.concurrent.CountDownLatch$Sync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:100)
at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:683)
at com.adventnet.webmon.util.LocationTestUtil.getLocationResponse(LocationTestUtil.java:430)
at com.adventnet.webmon.util.LocationTestUtil.getLocationResponse(LocationTestUtil.java:219)
at com.adventnet.webmon.conf.server.ConfDataCollection.doMultiLocationDC(ConfDataCollection.java:3192)
at com.adventnet.webmon.conf.server.ConfDataCollection.getResponseData(ConfDataCollection.java:2703)
at com.adventnet.webmon.conf.server.ConfDataCollection.invokeDataCollection(ConfDataCollection.java:479)
at com.adventnet.webmon.conf.task.ConfMonitorTask.run(ConfMonitorTask.java:676)
at com.zoho.scheduler.JobWrapper.invokeRunnableJob(JobWrapper.java:116)
at com.zoho.scheduler.instrument.WrappedJobWrapper.invokeRunnableJob(WrappedJobWrapper.java:34)
at com.zoho.scheduler.JobWrapper.executeJob(JobWrapper.java:89)
at com.zoho.scheduler.JobWrapper.run(JobWrapper.java:47)
at com.adventnet.taskengine.inmemory.TaskExecutor$2.call(TaskExecutor.java:113)
at com.adventnet.sas.scheduler.inmemory.WrappedSASExecutorListener.call(WrappedSASExecutorListener.java:33)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
345345435(DNS)-2019年8月13日星期二04:40:06 PDT“#1081优先级=5 os#u优先级=0 tid=0x00007f93e40d3000 nid=0xd820等待条件[0x00007f91c7cfa000]
java.lang.Thread.State:等待(停车)
在sun.misc.Unsafe.park(本机方法)
-停车等待(java.util.concurrent.CountDownLatch$Sync)
位于java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer.DoAcquireSharedTerruptibly(AbstractQueuedSynchronizer.java:997)
位于java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
位于java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
位于org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:100)
位于org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:683)
在com.advennet.webmon.util.LocationTestUtil.getLocationResponse(LocationTestUtil.java:430)上
在com.advennet.webmon.util.LocationTestUtil.getLocationResponse(LocationTestUtil.java:219)上
位于com.advennet.webmon.conf.server.ConfDataCollection.doMultiLocationDC(ConfDataCollection.java:3192)
位于com.aventnet.webmon.conf.server.ConfDataCollection.getResponseData(ConfDataCollection.java:2703)
位于com.aventnet.webmon.conf.server.ConfDataCollection.invokeDataCollection(ConfDataCollection.java:479)
在com.aventnet.webmon.conf.task.ConfMonitorTask.run(ConfMonitorTask.java:676)上
位于com.zoho.scheduler.JobWrapper.invokeRunnableJob(JobWrapper.java:116)
位于com.zoho.scheduler.instrument.WrappedJobWrapper.invokeRunnableJob(WrappedJobWrapper.java:34)
位于com.zoho.scheduler.JobWrapper.executeJob(JobWrapper.java:89)
位于com.zoho.scheduler.JobWrapper.run(JobWrapper.java:47)
在com.advennet.taskengine.inmemory.TaskExecutor$2.call(TaskExecutor.java:113)上
在com.advennet.sas.scheduler.inmemory.WrappedSASExecutorListener.call(WrappedSASExecutorListener.java:33)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
运行(Thread.java:748)
最大的问题是它不会发生在测试网格中,它只发生在生产服务器中

请帮忙解决这个问题


TIA

我怀疑这将成为一个疑难解答问题,有很多评论,需要更多信息,提供更多信息,因此StackOverflow并不是实现这一点的最佳平台。欢迎您在或上提问。好的,我们将向邮件列表发送一封邮件,谢谢@sbordet我们已经发送了足够的详细信息ls到邮件列表,请看一看,我怀疑这将成为一个疑难解答问题,有很多评论,需要更多信息,提供更多信息,因此StackOverflow并不是实现这一点的最佳平台。欢迎您在或上提问。OK将向邮件列表发送一封邮件,谢谢i@sbordet我们已经向邮件列表发送了足够的详细信息,请查看一下