You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac M1下JMeter堆大小调整无效,多线程运行内存报错求助

在Mac M1上正确调整JMeter堆大小并解决线程创建异常问题

一、正确设置JMeter堆内存的方法

你之前修改jmeter.bat是Windows平台的配置文件,Mac上无效;修改jmeter.sh时用了Windows的set语法,这是错误的——Mac的Shell脚本直接赋值即可。以下是三种有效方式:

1. 修改JMeter启动脚本(永久生效)

找到JMeter解压目录下的bin/jmeter.sh(或直接是bin/jmeter),打开文件找到HEAP变量定义行,替换为:

HEAP="-Xms1g -Xmx8g -XX:MaxMetaspaceSize=1024m"

-Xms是初始堆内存,-Xmx是最大堆内存,可根据你的M1内存配置调整(比如16G内存可设为-Xmx12g)。

2. 通过环境变量临时设置(单次会话生效)

在终端启动JMeter前,先执行以下命令设置堆内存参数:

export HEAP="-Xms1g -Xmx8g -XX:MaxMetaspaceSize=1024m"

之后再运行JMeter启动命令:

cd /path/to/jmeter/bin
./jmeter

3. 修改JMeter命令行启动参数(单次生效)

启动JMeter时直接传递JVM参数:

cd /path/to/jmeter/bin
./jmeter -Jheap="-Xms1g -Xmx8g -XX:MaxMetaspaceSize=1024m"

二、解决「unable to create new native thread」异常

你遇到的报错本质不是堆内存不足,而是系统允许当前用户创建的线程数限制。每个JMeter线程对应一个操作系统原生线程,当线程数超过系统限制时就会抛出该异常。

1. 查看当前线程限制

在终端执行:

ulimit -u

输出数字就是当前用户允许创建的最大线程数。

2. 临时调整线程限制(终端会话内生效)

执行以下命令提高线程数上限:

ulimit -u 8192

之后在该终端启动JMeter即可使用更高线程数。

3. 永久调整线程限制

  • 执行以下命令修改系统内核参数:
sudo sysctl -w kern.maxproc=8192
sudo sysctl -w kern.maxprocperuid=8192
  • 若要重启后依然生效,编辑/etc/sysctl.conf文件(不存在则创建),添加:
kern.maxproc=8192
kern.maxprocperuid=8192

三、额外优化建议

  • 4000线程属于高并发场景,单台M1设备可能面临CPU、网络瓶颈,建议考虑JMeter分布式测试,用多台机器分担压力。
  • 精简JMeter测试计划:移除不必要的监听器(比如查看结果树只在调试时用),使用CSV数据文件配置代替大量参数化元件,启用JMeter的精简模式。

内容的提问来源于stack exchange,提问作者Kumar Rounak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:05:23