質問

っており、最近では、Linuxのプロセスを"漏洩"のファイル記述子:でしか正しくあり紹介されています。

また監視し、このうえ事前にその限界.

が、Bash\Pythonチェックする方法をFDの使用比率与えられたプロセスをUbuntu Linuxシステム?

編集:

今からどのように多くのオープンしたファイル記述子はありま;かを知る必要があり どのように多くのファイル記述子を許可プロセス.一部のシステム(Amazon EC2)がないからなの /proc/pid/limits ファイルです。

おかげさ

Udi

役に立ちましたか?

解決

カウントのエントリ /proc/<pid>/fd/.のハード-ソフトの限界に適用される工程で /proc/<pid>/limits.

他のヒント

の界面にLinuxカーネルに資源の限度 getrlimit()/proc/pid/limits. getrlimit() ならではの資源の限界に呼び出します。 /proc/pid/limits できるリソースを取得す制限のプロセスのユーザーが同じidを利用RHEL5.2RHEL4.7、Ubuntu9.04、他の分布と2.6.24以降を含んでいます。

対応させる必要がある場合には歳以上のLinuxシステムのようにして実行してください、プロセスそのものへの通話 getrlimit().もちろん最も簡単な方法は、を変更することにより、プログラムやライブラリが使用しています。る場合には、プログラムその利用 LD_PRELOAD への負荷の自分自身のコードのプログラム。になりきることができ添えのプロセスのツールとしての実行の内します。きも同じことを自分自身を ptrace() 添付プロセスに挿入し、コール、メモリ等 しかしこのは非常に複雑なにがあるため、お勧めできません。

適切な特権、その他の方法は、以下の通り比較的簡単ですみを通じてカーネルメモリの読み込みカーネルモジュール、その他の改変をカーネルかもしれませんが、同じと仮定するとこれらの質問です。

見上位20位までのヒットチャートファイルを取り扱うプロセス:

for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20

出力の形式のファイルの取扱数、pid,cmndlineプロセス

出力例

701 1216 /sbin/rsyslogd-n-c5
169 11835 postgres: spaceuser spaceschema [local] idle
164 13621 postgres: spaceuser spaceschema [local] idle
161 13622 postgres: spaceuser spaceschema [local] idle
161 13618 postgres: spaceuser spaceschema [local] idle

滞在ビザを取得することができスクリプトの記述を定期的にコ lsof -p {PID} 与えられたpidです。

またbash/pythonます。ulimitのbashのアプローチのmungingを通じて /proc/$pid/fd のようにしようとする運動です。Pythonを使用できるリソースモジュールです。

import resource

print(resource.getrlimit(resource.RLIMIT_NOFILE))
$ python test.py

(1024, 65536)

resource.getrlimit に対応する getrlimit 通話中にCプログラム。その結果を代表する電流および最大値が要求された資源です。上記の例では、電流(ソフト)制限は1024の値は代表的なデフォルトのLinuxシステムです。

にCentOS6以下(ものを使用GCC3)よく目にすることでしょう調整時のカーネルを制限しないを解決するものとします。ことがございますので FD_SETSIZE 値はコンパイル時に使用GCC.このために必要な価値を向上さを再コンパイルします。

また、まだ漏れのファイル記述子による 既知の問題libpthread ご利用の場合はこの図書館があります。この呼び出したGCCにGCC4/CentOS7/RHEL7このように固定のネジに。

Pythonラッパーを用い、優れたpsutil package:

import psutil

for p in psutil.process_iter(attrs=['pid', 'name', 'username', 'num_fds']):
    try:
        soft, hard = p.rlimit(psutil.RLIMIT_NOFILE)
        cur = p.info['num_fds']
        usage = int(cur / soft * 100)
        print('{:>2d}% {}/{}/{}'.format(
            usage,
            p.info['pid'],
            p.info['username'],
            p.info['name'],
            ))
    except psutil.NoSuchProcess:
        pass
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top