macos 性能测试 内核优化配置

因为自己一直使用自己的macos笔记本,最近发现系统开多个浏览器情况下,出现部分http和websocket出现类似网络断流的问题,经过定位发现,应该是macos 内核参数需要优化导致的,故将自己的分享出来:
解决mac 在糟糕网络下 tcp/http 等连接较高概率超时失败问题

经过定位,应该是系统的tcp 和 socket连接数太小的问题,导致开大量应用后会出现该问题

1.增加 max files:

查看:

sysctl -a | grep files

输出:

kern.maxfiles = 12288
kern.maxfilesperproc = 10240

修改:

#设置系统最大连接数从12288到1048600.
sudo sysctl -w kern.maxfiles=1048600

#设置进程连接数限制,进程的最大连接数要小于等于全局连接数
sudo sysctl -w kern.maxfilesperproc=1048576

2.增加max sockets:

查看

sysctl -a | grep somax

输出:

kern.ipc.somaxconn: 256

修改:

sudo sysctl -w kern.ipc.somaxconn=4096

3.设置动态端口范围portrange

查看:

sysctl net.inet.ip.portrange

输出:

net.inet.ip.portrange.first: 49152
net.inet.ip.portrange.last: 65535

说明:Linux动态端口号默认范围是32768-65535,也就是说,作为客户端连接同一个IP和同一个端口号,最多只能建立30000多个连接,而Mac默认只能建立16000个左右的连接。

设置:

sudo sysctl -w net.inet.ip.portrange.first=32768

说明:设置动态分配起点端口号为32768,这样可以增大客户端可以建立的连接数。

4.tcp最大分段寿命

查看:

sysctl net.inet.tcp.msl

输出:

net.inet.tcp.msl: 30000

说明:最大段寿命*是一个 [TCP] [分段]可以存在于互联网系统中的最大时间。它被任意地定义为两分钟长。最大段寿命的值用来确定 TIME_WAIT 周期(最大段寿命的两倍)

设置:

sudo sysctl -w net.inet.tcp.msl=5000

说明:设置tcp失败后回收时间,由默认的30s修改为5秒,一般方便性能测试。

5.设置ulimit

查看:

ulimit -n 

说明:命令显示当前shell能打开的最大文件数,默认值:256,该值总是小于kern.maxfilesperproc的值,因为一个shell就是一个进程。

修改:

ulimit -n 1048576

6.确保重启后参数生效(永久设置)

6.1按以上的方式设置参数有个问题,当系统重启后,这些参数又恢复成了默认值,解决办法就是把参数写到/etc/sysctl.conf文件中,但是,默认macos这个文件是不存在的,所以首先就要创建它:
sudo touch /etc/sysctl.conf

然后把参数写到文件里

kern.maxfiles=1048600
kern.maxfilesperproc=1048576
kern.ipc.somaxconn=4096
net.inet.tcp.msl=5000
net.inet.ip.portrange.first=32768
#net.inet.ip.portrange.last=65535
6.2至于ulimit-n的值,可以把ulimit-n1048576 写到.bashrc中实现自动修改。
vim ~/.bashrc

然后把参数写到文件里

ulimit -n 1048576

如果是创建的.bashrc增加权限:

chmod 777 ~/.bashrc

重启系统后,查看批量查看结果

ulimit -n 

sysctl kern.maxfiles kern.maxfilesperproc kern.ipc.somaxconn net.inet.tcp.msl net.inet.ip.portrange.first net.inet.ip.portrange.last

6.3 最后修改参数总结:(临时设置)

sudo sysctl -w kern.maxfiles=1048600
sudo sysctl -w kern.maxfilesperproc=1048576
sudo sysctl -w kern.ipc.somaxconn=4096
sudo sysctl -w net.inet.tcp.msl=5000
sudo  sysctl -w net.inet.ip.portrange.first=32768
ulimit -n 1048576

你可能感兴趣的:(macos 性能测试 内核优化配置)