【发布时间】:2019-03-26 21:52:56
【问题描述】:
问题的简短版本是:如何调整\配置 macOS (Mojave 10.14.3) 设置以允许每个进程超过 10k 的传出 TCP 连接,总共超过 16k 连接。
详情:
我正在尝试使 MacBookPro(16Gb RAM,Core i7)可用于压力测试 tcp 服务器。服务器本身托管在单独的电脑上,所以现在的问题只是关于传出连接。
以下建议已经处理并帮助我显着提高了初始操作系统限制。
1) 我使用 [launchctl] ("Too many open files" when executing gatling on Mac) 将 maxfiles 限制增加到 100 万。
2) 我使用sysctl 设置\检查 kern.maxfiles 限制。实际上(据我了解)这与 #1 相同。
3) 我玩过ulimit。实际上我没有注意到这个工具对我的操作系统有任何影响。但无论如何...
所以现在我的 MacOS 可以为每个进程建立约 10k 个连接,系统中的总连接数为 16k。
为简单起见,我的工具只是在无限循环中打开 TCP 连接并等待。
try
{
while (true)
{
CreateAndConnectSocket(); //add socket to list
++connectedSockets;
}
}
catch(Exception e)
{
LogWrite("Connected sockets:" + connectedSockets);
LogWrite(e);
WaitForAnyKey();
}
然后我按照以下步骤操作。
1) 在单独的 PC 上启动服务器。
2)在mac上打开两个终端。
3)在第一个终端窗口中执行:
$ sudo launchctl limit maxfiles 1048576 1048600
$ ulimit -S -n 1048576
4) 验证在第一个终端中应用的更改:
$ ulimit -S -n
1048576
$ launchctl limit maxfiles
maxfiles 1048576 1048600
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 1048576
$ sysctl kern.maxfiles
kern.maxfiles: 1048600
5) 在第二个终端启动“ulimit -S -n 1048576”(不确定是否需要 ulimit。)
6) 验证是否在第二个终端窗口中应用了所有更改(与#4 相同)。
7) 在第一个终端启动“测试客户端”。
8) 在第二个终端启动“测试客户端”。
结果:
在第一个终端的第 7 步之后,我可以看到,该工具打开了 10k 连接(准确地说是 10202),并且出现异常“系统中打开的文件过多”。不知道为什么打开的文件是 100 万个限制的问题。
在第二个终端的第 8 步之后,我可以看到该工具打开了 6k 连接并出现异常“无法分配请求的地址”。
虽然套接字保持打开状态(工具等待按键),但系统中无法创建其他连接 - 浏览器无法建立与 google.com 的连接等。
当然 tcp 服务器仍然可以从其他 PC 访问。
由于我能够调整“Windows 10 Home”以获得更高的连接数,我相信 MacOS 也可以调整。
【问题讨论】:
-
不。我放弃。在我的实验中,我意识到 mac-desktop 上的网络子系统在高负载下存在可靠性问题。因此,这些额外的数千个连接有可能无法按预期工作。所以我决定不要浪费我的时间。
标签: macos sockets tcp configuration limit