私は25のスクレイピージョブを実行しており、それぞれが重いマシン(Ubuntu 12.04.3 LTSを使用)で50の同時リクエストを持っています。プロキシを使用してリクエストを送信しています。約15分後、ほとんどすべてのリクエストからこのエラーが発生します。
Connection was refused by other side: 111: Connection refused.
プロキシサービスプロバイダーに問い合わせたところ、この問題は私の側のソケットの処理によるものだと言われました。
したがって、私のスクリプトは1250の同時リクエストを送信します。とにかく私は問題がどこにあるかを見つけることができますか? Ubuntuに接続制限はありますか?
これについて少し調査したところ、serverfaultで非常によく似たスレッドが見つかりました here 。このような大量の同時接続はあまり一般的ではないため、この特定のケースでは、カーネルが制限要因になる可能性があります。受け入れられた回答は、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
私がリンクしているスレッドを見てください。カスタム設定では常に非常に注意してください。
同じ問題がありました。クモをスーパーユーザーとして実行してみてください。コマンドscrapy runspider
でスパイダーを直接実行していました。
Sudo scrapy runspider
動いた。