オープンソケットハンドラとnetstat DGRAMエントリが多すぎるのはなぜですか?

オープンソケットハンドラとnetstat DGRAMエントリが多すぎるのはなぜですか?

私はさまざまなAPIをクエリし、それを使用する他のアプリケーションで使用するAPIを提供するRPi(Raspbian)3.12.35+ #730 PREEMPT Fri Dec 19 18:31:24 GMT 2014 armv6l GNU/LinuxでPython 2.7.8のデーモンを実行していますrequests(両方とも同じコンピュータで実行されています)。私は最近、ログで(デーモンがしばらく実行された後)、例外によって開かれたファイルハンドラが不足していることを発見しましたrequests

('Connection aborted.', error(23, 'Too many open files in system'))

明示的にファイルを開いていないため、私のhttp通話が開いていると思われます。

私は約10秒ごとに(主にlocalhostとして)呼び出し、1〜2時間デーモンを実行した後、lsof32,000を超えるオープン接続を報告しますsock

python2     804             pi  982u     unix 0xce3565a0        0t0     116809 socket
python2     804             pi  983u     unix 0xcb5553c0        0t0     116875 socket
python2     804             pi  984u     unix 0xcb555780        0t0     116899 socket
python2     804             pi  985u     unix 0xd74dd1e0        0t0     117010 socket
python2     804             pi  986u     unix 0xcb555d20        0t0     116918 socket

この数は、すべてのアプリケーションの呼び出し速度に応じて多少増加します。

'Connection': 'close'コードで明示的に設定してこれらの接続を強制的に閉じたかったのですが、残念ながらこれは役に立ちませんでした。lsof数え切れないほどのオープンsockハンドラがまだ表示されています。

netstat多数DGRAMの接続マーク(約12,000以上):

(...)
unix  2      [ ]         DGRAM                    74315
unix  2      [ ]         DGRAM                    68340
unix  2      [ ]         DGRAM                    67749
unix  2      [ ]         DGRAM                    58836
unix  2      [ ]         DGRAM                    58087
(...)

さらに心配なのは、tcpシーケンスがネットワークレベルで正しく閉じているようです。

ここに画像の説明を入力してください。

だから私はここで迷子になりました。オープンディスクリプタの数の増加はhttp呼び出しによるものかもしれませんが、なぜ彼らがオープンハンドラを残すのかを理解するのは難しいですか?

注:もともとこの質問はSO(私のコードを指している)について質問しましたが、システム指向であると思います。

ベストアンサー1

おすすめ記事