适用于 FRP 大并发、Nginx、高性能应用、数据库连接池 等场景。
1. 背景与功能作用
-
ulimit -n 表示 单个进程可打开的最大文件描述符数(影响 TCP 连接数)。
-
FRP(frps / frpc)在高并发时会因 “too many open files” 报错。
-
macOS 默认值仅 256,严重限制高并发性能。
-
目标:提升到 65536,并确保系统守护进程和终端都生效。
2. 默认值检查
ulimit -n
# 默认:256
查看 Launchd 全局限制:
launchctl limit
3. 调整方法
(A) 临时生效(仅当前 shell)
ulimit -n 65536
缺点:重启后失效。
(B) 永久生效(终端会话)
修改 ~/.zshrc:
vi ~/.zshrc
添加:
ulimit -n 65536
执行:
source ~/.zshrc
验证:
ulimit -n
# 输出:65536
(C) 系统级全局生效
-
编辑 sysctl(内核参数)
sudo vi /etc/sysctl.conf
添加:
kern.maxfiles=65536
kern.maxfilesperproc=65536
加载:
sudo sysctl -w kern.maxfiles=65536
sudo sysctl -w kern.maxfilesperproc=65536
-
创建 LaunchDaemon(确保开机生效)
sudo vi /Library/LaunchDaemons/limit.maxfiles.plist
内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>limit.maxfiles</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>65536</string>
<string>65536</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
加载:
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
4. 验证
ulimit -n
# 65536
launchctl limit
# maxfiles 65536 unlimited
5. 对 FRP 的作用
[transport]
maxPoolCount = 10
heartbeatTimeout = 120
tcpKeepalive = 7200
并调整 Linux ulimit 和内核参数,FRP 可轻松支撑高并发。