压测加到 500 线程后 JMeter 界面卡住不动,日志里 OutOfMemoryError: Java heap space。启动参数还是默认的 -Xmx1g,监听器开了查看结果树。日志里能对上时间点,这种反而好排。

GUI 模式会把每个请求的响应都存进内存给结果树用,500 线程几分钟就吃掉几个 G。默认堆只有 1G,频繁 GC 之后界面直接无响应。压测应该用命令行模式,结果写文件。这一点先确认清楚,后面就不用反复试。

export HEAP="-Xms4g -Xmx4g -XX:MaxMetaspaceSize=512m"
jmeter -n -t plan.jmx -l result.jtl -Jthreads=500

「JMeter 堆内存」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:改用 jmeter -n 命令行模式 关掉所有监听器;堆调到 4G 以上 按线程数估算;结果只写 jtl 精简字段 别存响应体;用阶梯加压找到本机可承受的线程上限。

结果对不对很好判断,500 线程命令行压测跑满 10 分钟不再 OOM,GC 时间占比低于 5%。

作者 9823189