我们以前在我们的环境中遇到过问题,似乎我们达到了 FreeBSD 的最大连接限制。我们采取了http://nginx.org/en/docs/freebsd_tuning.html所展示的行动,并将我们的连接限制提高到 500:kern.ipc.somaxconn: 500
我们仍然遇到问题,我们希望看到从客户端到此特定服务器的其他连接,但我们没有,它们丢失了。
我们不知道这是应用程序问题还是网络问题。但我想知道我们现在是否还有其他限制,也许是建立连接的最大数量?
下面是一些图表,显示了我们的连接行为,奇怪的是它被限制在 300 个连接:
我们服务器上丢失的命令的大约数量^
编辑:
有关应用程序的其他详细信息:该应用程序是一个 tclsh(tcl shell),它使用套接字应用程序在特定的 tcp 端口上侦听以接收连接。也许这是一些基于 tcl 的限制或套接字应用程序限制?
故障排除详细信息:当我运行 nmap 基本上一遍又一遍地“ping”所需的端口时
for i in {1..600}; do nmap -p 2069 serverIP; done
我似乎通过 netstat 得到以下信息:
netstat -Lan | grep 2069
tcp4 193/0/128 *.2069
tcp4 193/0/128 *.2069
tcp4 193/0/128 *.2069
tcp4 193/0/128 *.2069
这似乎意味着我实际上正在最大化 kern.ipc.somaxconn 默认值。但是我们已经将该值设置为远高于默认值。
即使我使用以下方法监视已建立的连接:
netstat -an | grep 2069 | wc -l
我在 2069 年总共只获得了 192 个连接。这意味着它在该特定端口上不接受更多连接。
似乎这实际上是一个应用程序限制。在 2069 套接字上侦听的进程是使用最大数量的 192 个侦听连接构建的。
我假设很多应用程序都是在这些限制的情况下构建的,somaxconn 很可能只是增加了允许的监听套接字总数,而不是应用程序实际构建的目的。
我想到了文件句柄。首先检查
ulimit -n
(或,取决于外壳,limit -n
)如果它返回1024
。ulimit -n 16384
如果是这样,请使用limit -n 16384
或 左右来提高文件句柄限制。看看是否有帮助。