2016-09-16 23 views
2

treq(https://github.com/twisted/treq)を使用して、私のWebサービスから他のいくつかのAPIを照会しています。私は自分のサービスのストレステストをしていたとき、今日、それは誤りErrno 24:開いているファイルが多すぎます。しかし、私はファイルを開いていませんか?

twisted.internet.error.DNSLookupError: DNS lookup failed: address 'api.abc.com' not found: [Errno 24] Too many open files.

を示ししかし、問題は、私は任意のファイルを開けませんでした私の全体のコードです。私はそれが私のストレステストがその終点へのddosのようなものになる可能性があるので、私はクエリがダウンしたり、私(api.abc.com)をブロックしたAPIによって引き起こされる可能性があると思う。それでも、その場合は接続を拒否するようなものではないでしょうか?なぜ私はそれがToo many open filesエラーを持っているか分からない。または、それはあまりにも多くのスレッドクエリを作成することによって引き起こされますか?

+0

"ファイル"は実際にはファイル記述子を意味し、ソケットのようなものを含んでいるので、たくさんの接続を開いていると、この問題に遭遇する可能性があります。 –

答えて

4

"ファイル"にはネットワークソケットが含まれています。これはUnixベースのシステム上のファイルの一種です。開いているファイルの最大数は、ファイルハンドルが不足し、上限を上げるために持っている驚くべきことではないulimit -n

# Check current limit 
$ ulimit -n 
256 

# Raise limit to 2048 
$ ulimit -n 2048 

で設定可能です。しかし、すでに制限値が高い場合は、ファイルハンドルが漏れている可能性があります(十分に速く閉じないでください)。 Pythonのようなガベージコレクトされた言語では、ファイナライザはファイルを十分に速く閉じるとは限りません。なぜなら、完了したらすぐにファイルを閉じるためにwithブロックまたは他のシステムを使用するよう注意する必要があるからです。

+0

この 'ulimit'は特定の端末に固有です。それは...ですか?私の 'ulimit'は1024です。ターミナルで5000に設定しましたが、それを5000に設定した端末を除いて他のすべてのターミナルで1024を表示しています。 – phanny

+0

@phanny:リソース制限は親プロセスから継承されています。 –

関連する問題