JMeter WebDriver Sampler压测遇JRE致命错误及CDP警告求助排查
针对你遇到的JMeter WebDriver Sampler压测时的JRE致命错误和CDP版本警告,我分两部分具体分析:
一、致命栈溢出错误的核心原因与诱因
1. 内存与分页文件耗尽是直接触发点
错误日志里的两个关键信息已经点明了核心问题:
An unrecoverable stack overflow has occurred.
Failed to write core dump. Call to MiniDumpWriteDump() failed (Error 0x800705af: The paging file is too small for this operation to complete.)
你的Jenkins所在机器的物理内存+虚拟分页文件已经被完全耗尽。1500个并发用户对应的资源开销非常大:
- 每个无头Chrome实例即使在轻量模式下,也会占用200-300MB内存(取决于被测页面复杂度);
- 每个JMeter线程默认栈大小为1MB,1500个线程仅栈内存就需要1.5GB;
- 再加上ChromeDriver进程、JVM堆内存、Jenkins自身占用的资源,机器内存很快会被打满,当JVM尝试分配栈保护页时,系统已无可用内存,最终触发栈溢出。
2. 高并发线程快速启动的资源冲击
60秒内启动1500个线程(每秒25个)的配置,会瞬间耗尽系统的进程句柄、内存资源,导致内存碎片化严重。运行15分钟后,资源泄漏(比如未正常关闭的Chrome进程)或内存碎片积累到临界值,JVM无法分配连续内存块用于栈保护,最终触发致命错误。
3. JVM参数未针对高并发场景优化
Java 8默认的线程栈大小(-Xss1m)在1500线程的场景下,栈内存总占用量过高。如果JMeter启动时没有调整堆内存参数(比如-Xms、-Xmx),JVM会频繁执行垃圾回收,甚至出现堆内存不足的情况,间接干扰栈内存的正常分配。日志中jvm.dll相关的报错,也和JVM栈保护机制在高负载下的异常有关。
4. Jenkins环境的资源限制
如果Jenkins运行在资源受限的机器(比如小规格云服务器),或者机器的分页文件设置过小,会进一步加剧内存不足的问题。此外,Jenkins服务可能没有足够的系统权限调整分页文件大小,导致内存耗尽时无法自动扩容虚拟内存。
二、CDP版本警告的间接影响
你看到的CDP版本警告:
WARNING: Unable to find version of CDP to use for . You may need to include a dependency on a specific version of the CDP using something similar to
org.seleniumhq.selenium:selenium-devtools-v86:4.5.0...
这说明Selenium DevTools版本与Chrome浏览器版本不匹配。虽然这个警告不会直接导致栈溢出,但会引发内存泄漏风险:
- 版本不匹配可能导致ChromeDriver无法正确管理Chrome进程,比如测试结束后无法关闭浏览器进程,导致这些进程持续占用内存;
- 部分WebDriver命令可能执行异常,导致线程资源无法正常释放,进一步加重内存负担,加速内存耗尽的过程。
内容的提问来源于stack exchange,提问作者Nae Tester

