HTTP2 请求示例使用 Jmeter4 崩溃,Java 10 No Client ALPNProcessors

Posted

技术标签:

【中文标题】HTTP2 请求示例使用 Jmeter4 崩溃,Java 10 No Client ALPNProcessors【英文标题】:HTTP2 request sample crashes with Jmeter4, Java 10 No Client ALPNProcessors 【发布时间】:2018-12-27 18:03:40 【问题描述】:

我无法使用 Jmeter 4.0 创建 HTTP2 请求。 我已经安装了最新的 JDK,和 HTTP/2 协议采样插件。

我还观察到:“penJDK8ClientALPNProcessor@e23ec5a 不适用于 java 10.0.2” 尝试使用 Java 9,但我得到了同样的结果。

PS:我已经尝试添加 JVM_ARGS=...

完整的堆栈跟踪是:

java.util.concurrent.ExecutionException: java.lang.IllegalStateException: No Client ALPNProcessors!
    at org.eclipse.jetty.util.FuturePromise.get(FuturePromise.java:138)
    at com.blazemeter.jmeter.http2.sampler.HTTP2Connection.connect(HTTP2Connection.java:65)
    at com.blazemeter.jmeter.http2.sampler.HTTP2Request.setConnection(HTTP2Request.java:247)
    at com.blazemeter.jmeter.http2.sampler.HTTP2Request.sample(HTTP2Request.java:121)
    at com.blazemeter.jmeter.http2.sampler.HTTP2Request.sample(HTTP2Request.java:107)
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:490)
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:416)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:250)
    at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: No Client ALPNProcessors!
    at org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory.<init>(ALPNClientConnectionFactory.java:57)
    at org.eclipse.jetty.http2.client.HTTP2Client.lambda$doStart$1(HTTP2Client.java:155)
    at org.eclipse.jetty.http2.client.HTTP2Client$ClientSelectorManager.newConnection(HTTP2Client.java:438)
    at org.eclipse.jetty.io.ManagedSelector.createEndPoint(ManagedSelector.java:222)
    at org.eclipse.jetty.io.ManagedSelector.access$1500(ManagedSelector.java:60)
    at org.eclipse.jetty.io.ManagedSelector$CreateEndPoint.run(ManagedSelector.java:825)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:754)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:672)
    ... 1 more
    Suppressed: java.lang.IllegalStateException: org.eclipse.jetty.alpn.java.client.OpenJDK8ClientALPNProcessor@e23ec5a not applicable for java 10.0.2
        at org.eclipse.jetty.alpn.java.client.OpenJDK8ClientALPNProcessor.init(OpenJDK8ClientALPNProcessor.java:41)
        at org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory.<init>(ALPNClientConnectionFactory.java:77)
        ... 8 more

【问题讨论】:

【参考方案1】:

HTTP/2 Sampler的默认安装使用依赖...

Install library: http2-client
Install library: jetty-alpn-openjdk8-client
Install library: jetty-alpn-client
Install library: http2-common
Install library: http2-hpack
Install library: jetty-io
Install library: jetty-http
Install library: jetty-util
Install plugin: bzm-http2 1.2

此依赖项列表对 Java 9+ 无效。

特别是,jetty-alpn-openjdk8-client 依赖项无效并且不适用于 Java 9+。 对于 Java 9+,应该使用 jetty-alpn-java-client

历史:

在 Java 8 时代,需要支持 HTTP/2,这需要 ALPN 层才能实现 TLS。

Java 8 没有对 ALPN 的官方支持,因此 Jetty 项目维护了一个 JVM -Xbootclasspath/p:&lt;path-to-alpn-boot.jar&gt; 替换 JVM 中的核心 SSL 层以允许使用 ALPN。

这是 JVM 本身不提供的自定义 API。

https://www.eclipse.org/jetty/documentation/current/alpn-chapter.html

Jetty 以外的其他项目也开始使用此 API。

当 Java 9 网络讨论开始时,需要将 ALPN 支持纳入 JVM 本身。

openjdk 的这项工作成为 ALPN 的官方 API。

这个新的官方 API 不同于 Java 8 API。

简而言之,您必须为所使用的 JVM 使用适当的 API 层。

如果您需要对此的支持,请在 jmeter-plugins forum 上打开一个新主题(请随时参考此 *** 答案)

【讨论】:

我正在使用 java 11.0.2 并看到异常:Suppressed: java.lang.IllegalStateException: org.eclipse.jetty.alpn.java.client.OpenJDK8ClientALPNProcessor@38fcdeda not applicable for java 11.0.2 如何安装jetty-alpn-java-client【参考方案2】:

调查

JDK8ClientALPNProcessor

我的期望是您必须使用Java 8 SE 才能使插件正常工作。

参考资料:

HTTP/2 - How to get ready for the future The New HTTP/2 Plugin for JMeter - The Complete Guide

【讨论】:

【参考方案3】:

使用码头 9.4.19.v20190610:

    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-alpn-java-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-alpn-conscrypt-client</artifactId>
    </dependency>

【讨论】:

以上是关于HTTP2 请求示例使用 Jmeter4 崩溃,Java 10 No Client ALPNProcessors的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter4.0----响应断言

启动Jmeter4.0 后弹出命令窗口提示信息是什么意思?

HTTP2.0协议被曝4个高危漏洞,可致服务器崩溃

Jmeter4.0压测实战

Jmeter4.0----监控服务器性能

Jmeter4.0源码二次开发详细分析解读