mac系统默认单进程文件句柄限制为256,需通过ulimit临时设置或创建launchd plist永久配置来提升至65536,后者是apple官方推荐且catalina+版本验证可靠的方法。

Mac系统默认单进程最多只能打开256个文件句柄,当运行Node.js服务、数据库连接池或压测工具时极易触发“Too many open files”错误,必须通过终端修改系统级限制才能彻底解决。
临时修改当前终端会话的文件句柄数
这一步只对当前终端窗口生效,关闭后失效,适合快速验证是否有效。
执行 ulimit -n 65536 即可将软限制设为65536;
若提示权限不足,先运行 ulimit -Hn 查看硬限制值,再用 sudo ulimit -n 65536 尝试(但 macOS 中 sudo ulimit 实际无效,此操作不会成功);
【真正有效的临时设置必须在未启动任何子shell前执行,且不能依赖sudo提升ulimit】。
永久修改所有用户和新会话的文件句柄限制
macOS 不读取 /etc/security/limits.conf,也不支持传统 Linux 的 limits.d 机制,必须使用 launchd 配置。推荐采用以下方法一,它被 Apple 官方文档和 Catalina 及后续版本广泛验证可靠。
方法一:创建 launchd 全局 plist 配置(推荐)
第一步:用管理员权限创建配置文件:sudo nano /Library/LaunchDaemons/limit.maxfiles.plist
第二步:粘贴以下内容(注意替换数值,建议软硬限制一致):
<?xml version="1.0" encoding="UTF-8"?><br><br><plist version="1.0"><br><dict><br><key>Label</key><br><string>limit.maxfiles</string><br><key>ProgramArguments</key><br><array><br><string>launchctl</string><br><string>limit</string><br><string>maxfiles</string><br><string>65536</string><br><string>65536</string><br></array><br><key>RunAtLoad</key><br><true></true><br><key>ServiceIPC</key><br><false></false><br></dict><br></plist>
第三步:保存退出(Ctrl+O → Enter → Ctrl+X),然后设置文件属主与权限:
sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plistsudo chmod 644 /Library/LaunchDaemons/limit.maxfiles.plist第四步:立即加载配置:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist【必须执行这一步,否则重启也不生效】。
方法二:修改 shell 启动文件(仅对当前用户生效)
适用于不想影响系统全局、仅需开发环境提升限制的场景。
编辑当前 shell 配置文件(zsh 用户为 ~/.zshrc,bash 用户为 ~/.bash_profile):echo "ulimit -n 65536" >> ~/.zshrc
然后执行 source ~/.zshrc 生效。
⚠️ 注意:该方式无法提升子进程继承的硬限制,且对 GUI 应用(如 VS Code 终端、IntelliJ 内置终端)可能不生效,因其不通过 shell 启动。
验证是否修改成功
重启终端应用(不是新建标签页,而是完全关闭再重开),然后运行:ulimit -n —— 应返回 65536;launchctl limit maxfiles —— 输出中 soft 和 hard 值均应为 65536;
若仍显示 256 或 1024,说明 plist 文件未正确加载或权限错误,检查上一步的 chown 和 chmod 是否遗漏。











