鱿鱼用完了插座

鱿鱼用完了插座

我有一个设置,其中 squid 位于 java 服务器前面并充当反向代理。最近我对网站进行了负载测试,如果我向它启动 100 个线程,每个线程都使用 jmeter 发出请求,我的负载测试工具就会开始出现错误,例如“没有到主机的路由”,即使负载测试工具和服务器在同一台机器上。

如果我运行以下命令,其中端口 82 是我的 squid 服务器正在运行的端口:

netstat -ann | grep 82 | wc -l

我得到了 22000 左右的数据,其中大多数处于 TIMED_WAIT 状态。我在想,也许处于 TIMED_WAIT 状态的大量套接字正在导致盒子缺乏资源。

答案1

答案2

有多种不同的限制会影响 Web 代理的运行。正如 sysadmin1138 所提到的,TCP 连接就是其中之一。

另一个,正如 Kyle 在我之前发帖时所说,是文件描述符。SQUID 的默认值(至少在 2.6 中)是 1024。要增加此限制,您必须重新编译并增加--with-maxfd。即使在使用更高的 FD 重新编译后,ulimit对于启动 squid 的用户,仍将有效。例如,要将资源限制增加到 8192,请在启动 squid 之前运行此命令:

ulimit -HSn 8192

如今,Linux 默认内核级别相当高,因此您可能不必在 SQUID 之外对 FD 进行调整。如果您提供日志输出,则很有可能它会指示确切的问题,我们可以提供更详细的建议。

答案3

可能是打开的文件太多了。unix 认为“一切都是文件”,包括套接字。你要么需要增加ulimit用户的最大打开文件数,要么可能还需要增加内核的最大打开文件/proc/sys/fs/file-max数()。你还可以使用 TIME_WAIT 来调整所花的时间/proc/sys/net/ipv4/tcp_fin_timeout

答案4

如果您使用的是 Squid 2.7,您可以设置可用的 fd 数量而无需重新编译; http://www.squid-cache.org/Doc/config/max_filedescriptors/

相关内容