Mac 最大连接数和端口的相关参数
1. 最大连接数限制
最大连接数限制就是系统所能打开的最大文件数(文件描述符)的限制,分全局和进程两种:
1.1. 全局
$ sysctl kern.maxfiles kern.maxfiles: 49152 ## 系统默认的最大连接数限制是 49152 $ sudo sysctl -w kern.maxfiles=1048600 ### 设置系统最大连接数从 49152 到 1048600
1.2. 进程
$ sysctl kern.maxfilesperproc kern.maxfilesperproc: 24576 ### 单个进程默认最大连接数限制是 24576 $ sudo sysctl -w kern.maxfilesperproc=1048576 ### 设置进程连接数限制 24576 到 1048576,进程的最大连接数要小于等于全局连接数
永久修改,需要在 /etc/sysctl.conf
里加上类似的下述内容
kern.maxfiles=20480 kern.maxfilesperproc=18000
这个文件可能需要自行创建
2. ulimit 命令
$ ulimit -n 4864 #### 显示当前shell能打开的最大文件数,默认值:4864,该值总是小于 kern.maxfilesperproc 的值,因为一个 shell 就是一个进程。 $ ulimit -n 1048576 ### 设置当前shell能打开的最大文件数为 1048576,该值不能大于 kern.maxfilesperproc ,否则会提示设置失败。
3. 动态端口范围
3.1. Linux
root@test:~# sysctl -a|grep ip_local_port_range net.ipv4.ip_local_port_range = 32768 60999 ### 表示 Linux 动态端口号默认范围是32768-60999,也就是说,作为客户端连接同一个IP和同一个端口号,最多只能建立 28231 多个连接
Linux 修改动态端口范围的方法:
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf sysctl -p ## 修改 Linux 动态端口号默认范围是 1024-65535
3.2. Mac OS:
$ sysctl net.inet.ip.portrange ## 低范围 net.inet.ip.portrange.lowfirst: 1023 net.inet.ip.portrange.lowlast: 600 ## 预设范围(默认使用该范围) net.inet.ip.portrange.first: 49152 net.inet.ip.portrange.last: 65535 ## 及高范围 net.inet.ip.portrange.hifirst: 49152 net.inet.ip.portrange.hilast: 65535 ### Mac默认动态端口号默认范围是 49152-65535,只能建立 16383 个左右的连接。
Mac OS 修改动态端口范围
$ sysctl -w net.inet.ip.portrange.first=32768 ## 表示修改动态端口的起始地址为 32768, 其他的类似。
4. launchd 对进程的限制
获取当前的限制:
$ launchctl limit maxfiles
输出类似这样:
maxfiles 256 unlimited
其中前一个是软限制,后一个是硬件限制。
临时修改:
$ sudo launchctl limit maxfiles 65536 200000
系统范围内修改则需要在文件夹 /Library/LaunchDaemons
下创建一个 plist 文件 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>200000</string> </array> <key>RunAtLoad</key> <true/> <key>ServiceIPC</key> <false/> </dict> </plist>
修改文件权限
$ sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist $ sudo chmod 644 /Library/LaunchDaemons/limit.maxfiles.plist
载入新设定
$ sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
5. 持久化 Mac 的配置(不建议)
sudo touch /etc/sysctl.conf; ## 添加如下内容到 /etc/sysctl.conf 文件 kern.maxfiles=1048600 kern.maxfilesperproc=1048576 net.inet.ip.portrange.first=49152 net.inet.ip.portrange.last=65535 ## 添加后重启
至于 ulimit -n 的值,可以写入到 .bashrc 文件中。
本文作者:大象。
本文链接:https://www.cnblogs.com/lliuhuan/p/18460082
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步