我在一台重型机器(使用 Ubuntu 12.04.3 LTS)上运行 25 个 scrapy 作业,每个作业都有 50 个并发请求。我使用代理发送请求。大约 15 分钟后,几乎所有请求都会出现此错误:
Connection was refused by other side: 111: Connection refused.
我联系了代理服务提供商,他们说这个问题是由于我这边处理套接字而引起的。
所以我的脚本发送了 1250 个并发请求。有什么办法可以找出问题所在吗?Ubuntu 上有连接限制吗?
答案1
我对此进行了少量研究,并在 serverfault 上发现了一个非常相似的帖子这里。看来您的内核可能是这种特殊情况下的限制因素,因为如此大量的并发连接并不常见。接受的答案指出,这可能是由于 ip_conntrack 表溢出造成的。
在 Ubuntu(服务器)上,修复方法是设置一些自定义参数/etc/sysctl.conf
net.ipv4.netfilter.ip_conntrack_max = 32768
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768 61000
请查看我链接的帖子,并始终非常小心具有自定义配置。
答案2
我遇到了同样的问题。尝试以超级用户身份运行蜘蛛。我直接使用命令运行蜘蛛scrapy runspider
,然后尝试使用以下命令执行它:
sudo scrapy runspider
有效。