记一次 JMeter 压测 HTTPS 可靠性问题
2025-08-25 12:15:56
"not available, use the default value (" +
DEFAULT_MAX_CACHE_SIZE + ") instead");
}
}
return DEFAULT_MAX_CACHE_SIZE;
}
通过上述预定义,发现 sessionCache 和 sessionHostPortCache 磁盘绑定不等是 DEFAULT_MAX_CACHE_SIZE,也就是 20480。对于我们气测的场面来说,如果每次请重新确立连接,那么就根本不需这块磁盘。再次看下预定义逻辑上,发现其实可以通过 javax.net.ssl.sessionCacheSize 来设并置磁盘的不等,在 JMeter 启动时,填充 JVM 值-Djavax.net.ssl.sessionCacheSize=1,将磁盘不等设并置为 1,重新气测验证,仔细观察观察 GC。
可以显现出,YGC 明显变少了,从 1 秒 1 次,替换成了 5-6 秒 1 次。那么仔细观察观察上到测的 RT,结果。。。竟然还是 1800ms,本来 100ms 的增值被气成 1800ms,无论如何疑虑不在于 SSLSession 的磁盘。再次来到 GC 的耗费系统性部分,仔细观察看下,其实 Full GC 只有 1 次,情况严重性的耗费并不多,Young GC 虽然长等待时间,但情况严重等待时间长达,也不至于将 SSL 加解密的 CPU 计算等待时间片全部抢占。看起来阻力就是单纯的 SSL 鞠躬次数多,蒙受效能瓶颈。
变动思路:为什么长等待时间 SSL 鞠躬
来到疑虑背景,我们是在做阻力次测试,同类型亦会跑极高的所发演示使用者量,出于效能考虑到,完全可以一次鞠躬后提供者 SSL 连接,原可先不再次鞠躬,为什么 JMeter 亦会如此长等待时间鞠躬呢?
带着这个疑虑,看了下 JMeter 官方文档,果然有令人兴奋!
这样一来 JMeter 有 2 个继电器在掌控有否替换 SSL 自然语言的绑定,首可先是 https.sessioncontext.shared 掌控有否全局提供者同一个 SSLContext,如果设为 true,则各驱动程序提供者同一个 SSL 自然语言,这样对提出抗议一号机效能阻力最少,但不能演示普通人多使用者 SSL 鞠躬的情况。
第二个继电器 httpclient.reset_state_on_thread_group_iteration 是驱动程序四组每次反向有否替换 SSL 自然语言,5.0 之后绑定为true,也就是说每次反向都亦会替换 SSL 自然语言,无论如何这就是导致 SSL 长等待时间鞠躬的或许。
疑虑验证回归次测试
在 jmeter.properties 之中将配并置每个驱动程序反向时,不替换 SSL 自然语言,在 PTS 掌控台再次次启动气测,RT 直接下降 10 倍。
httpclient.reset_state_on_thread_group_iteration=false
改写前
改写后
GCC验证
下面从GCC技术性系统性下 JMeter 是怎么意味着反向替换 SSL 自然语言的,预定义如下:
/**
* Whether SSL State/Context should be reset
* Shared state for any HC based implementation, because SSL contexts are the same
*/
protected static final ThreadLocal resetStateOnThreadGroupIteration =
ThreadLocal.withInitial(() -> Boolean.FALSE);
/**
* Reset SSL State.
* In order to do that we need to:
*
* Call resetContext() on SSLManager
* Close current Idle or Expired connections that hold SSL State
* Remove HttpClientContext.USER_TOKEN from {@link HttpClientContext}
*
* @param jMeterVariables {@link JMeterVariables}
* @param clientContext {@link HttpClientContext}
* @param mapHttpClientPerHttpClientKey Map of {@link Pair} holding {@link CloseableHttpClient} and {@link PoolingHttpClientConnectionManager}
*/
private void resetStateIfNeeded(JMeterVariables jMeterVariables,
HttpClientContext clientContext,
Map> mapHttpClientPerHttpClientKey) {
if (resetStateOnThreadGroupIteration.get()) {
// 关闭当前驱动程序近似于连接池的超时、平常连接,替换连接池状态
closeCurrentConnections(mapHttpClientPerHttpClientKey);
// 替换Token
clientContext.removeAttribute(HttpClientContext.USER_TOKEN);
// 替换SSL自然语言
((JsseSSLManager) SSLManager.getInstance()).resetContext();
// 标示出并置为false,保证一次反向之中,只有第一个采样器走进此逻辑上
resetStateOnThreadGroupIteration.set(false);
}
}
@Override
protected void notifyFirstSampleAfterLoopRestart() {
log.debug("notifyFirstSampleAfterLoopRestart called "
+ "with config(httpclient.reset_state_on_thread_group_iteration={})",
RESET_STATE_ON_THREAD_GROUP_ITERATION);
resetStateOnThreadGroupIteration.set(RESET_STATE_ON_THREAD_GROUP_ITERATION);
}
在每次基于 Apache HTTPClient4 的 HTTP 采样器可执行时,都亦会命令行 resetStateIfNeeded 方式,在进到方式时读取 httpclient.reset_state_on_thread_group_iteration 配并置,即 resetStateOnThreadGroupIteration。如果是 true,替换当前驱动程序的连接池状态、替换 SSL 自然语言,然后再次将 resetStateOnThreadGroupIteration 并置为 false。
因为 JMeter 的所发是基于驱动程序意味着的,resetStateOnThreadGroupIteration 这个继电器放在 ThreadLocal 里,在每次反向开始时,亦会命令行 notifyFirstSampleAfterLoopRestart 方式,替换继电器,运转一次后,自愿把继电器并置为 false。这保证了每次反向只有第一个采样器进到此逻辑上,也就是每次反向只可执行一次。
总结本次解决了 JMeter5.0 版本以上气测 HTTPS 协议的效能疑虑,经验总结如下:
如果希望提出抗议一号机发挥最大效能,可以将 https.sessioncontext.shared 设为 true,这样所有驱动程序亦会提供者同一个 SSL 自然语言,不亦会长等待时间鞠躬,但是不能演示普通人情况下多使用者的场面。 如果希望演示多个使用者,不停反向可执行某一个跳跃,也就是一个驱动程序四组每次反向演示同一个使用者的行为,可以将 httpclient.reset_state_on_thread_group_iteration 设并置为 false,这样也可以非常大的提高同类型气测 HTTPS 的效能。 如果希望每个驱动程序四组每次反向演示不同使用者,那需设并置 httpclient.reset_state_on_thread_group_iteration=true,此时气测亦会演示多使用者长等待时间 SSL 鞠躬,提出抗议一号机效能最少,从经验来看,同类型上限 50 所发约莫。这也是 JMeter5.0 版本之后的绑定设并置。 阿里云 JMeter 气测阿里云 PTS 气测工具[1]反对原生 JMeter 脚本,并且在 HTTPS 的气测之中已将 httpclient.reset_state_on_thread_group_iteration 绑定设并置为 false,极大提高气测 HTTPS 时提出抗议一号机效能,节省气测开销。如果演示最普通人的使用者访问情况来气测,可以通过改写 JMeter 环境污染之中的自定 properties 配并置[2],将 httpclient.reset_state_on_thread_group_iteration 设并置为 true。
除此以外,阿里云 JMeter 气测有以下优势:
零运维开销反对特有种式气测,即气即用 气测之中提示秒级监视系统,实时观测系统效能水位 反对 RPS 模式,精确衡量系统吞吐量 全球地域策动百万级所发流量,演示普通人使用者特有种 反对阿里云 VPC 气测,一键打通云上内网环境污染 反对 JMeter HTTP插件,本地快速策动云侧气测原文链接:
本文为阿里云原创内容,擅自必需不得转载。
。湖北白癜风医院挂号咨询广东妇科医院哪个比较好
广东妇科医院预约挂号
西宁看妇科哪里好
泉州白癜风医院电话
老人中风
女性祛斑
吃什么药治疗风热感冒咳嗽
纵隔肿瘤
腹泻不止
-
新华视点 | AI赋能 截取智慧防疫背后的“硬核”科技
太赫兹安检测温一体机让安检速度大幅提高10倍;不交谈实物,点击直升机扫描就能完成函件、购票、刷卡等服务的自助适配器可以有效阻隔交叉感染…… 运用大数据、5G等信息技术,从科研成果
2025-08-25 00:15:56
-
小数点的力量!一起来围观5G加持下的轮胎生产现场
以5G为代表的小型化信息无线电通信新技术,正驱动数字在经济上发展逆势航船,在反为海外投资、反为增长中体现积极作用。5G“进厂”,加速融合工业仅有链条,推动对等在经济上朝着格外降低成本、格外高效率
2025-08-25 00:15:56
-
“为删除而设计”的Hinge 如何成为真实关系的社交广泛应用天花板
进行评论,提升最简单事与愿违的不太可能。促成“双向点罕”后,两方即可转回深一步的留言板。 作为一款“借此被普通用户删除”的约就会广泛应用,Hinge借此所有普通用户持续保持认真
2025-08-25 00:15:56
-
快手Q1业绩超预期 数字经济模拟器普惠社会价值凸显
,也展现出了较短时间在手电承包勇担该平台政治责任与超市一家人时艰的尽力。 为最大素质从前大助超市降低公交系统费用,较短时间在手电承包便度制订鼠疟疾过后超市折扣国策。继2021年一个中心示
2025-08-25 00:15:56
-
Meta Quest 2支持标记工艺品和墙壁,仅限VST模式
5月25日消息,随着v40控制系统改版随之推送,Quest 2APP了Meta此前公布的家具和墙面给定新功能。据知,以外这还是一个实验新功能,其在结构上是允许你在VST AR方式也里记号房间的墙
2025-08-25 00:15:56