これが私の問題です、muninチャートで表示されます:
私の使用済み/開いたiノードは、「突然」絶えず増加しています。
現在開かれているiノードを保持しているプロセスを特定する方法はありますか?私は https://unix.stackexchange.com/questions/117093/find-where-inodes-are-being-used のアプローチを使用して、取得できるメールとログを含むいくつかのフォルダーを見つけてクリーンアップしました取り除く...それでも、iノードがOPENの場合、それらを使用し続けるためのプロセスが必要ですよね?それは必ずしも増加が行われているほとんどのファイルが含まれているフォルダではない可能性があります-または私はそこに間違っていますか?
それで、誰がそれらを開いたままにしているのかを確認し、使用量を追跡して、増加の原因を確認したいと思います
更新
Andrewのスクリプトに基づいて、プロセス名も表示するバージョンを作成しました。再起動する可能性のあるnginx/Apacheプロセスがいくつか実行されているので、プロセス名の結果を確認したいと思います。
for dir in /proc/*/fd;
do
echo -n "$dir ";
pid=`expr "$dir" : '\/proc\/\(.*\)\/.*'`; # extract the pid
pname=`ps -p $pid -o comm=`; # grab process name
echo -n "$pname ";
ls $dir 2>/dev/null | wc -l;
done | sort -n -k 3
出力例:
/proc/4612/fd sshd 49
/proc/46470/fd node 60
/proc/5655/fd nginx 66
/proc/6656/fd nginx 76
/proc/7654/fd nginx 81
/proc/8578/fd dovecot 107
/proc/9657/fd nginx 117
/proc/3495/fd Java 146
/proc/4785/fd mysqld 382
したがって、次のテストは、時間の経過とともにディストリビューションをログに記録して、どのような変更があり、それがMorganが言及した/ proc/sys/fs/inode-nrの数とどのように相関しているかを確認することです。
1年後...
そして、9月末が故障したドライブが交換された時点です。したがって、全体の混乱はディスクエラーによって生成されたようです。それにもかかわらず、スクリプトはまだ役に立ちます!
各/proc/[PID]/fd
ディレクトリのエントリ数をカウントします。これにより、各プロセスが開いているファイル記述子の数がわかります。すべてのプロセスを列挙するのにはしばらく時間がかかりますが、カウントの進行中に開始または停止する欠落したプロセスは、オープンファイル記述子が多数ある長期間有効なプロセスを探しているため、問題にはなりません。
このようなもの:
for dir in /proc/*/fd;
do
echo -n "$dir "; #need a space to get real columns for the sort
ls $dir 2>/dev/null | wc -l;
done | sort -n -k 2
出力の最後の行には、/ proc/[PID]/fdディレクトリと、各プロセスの開いているファイル記述子の数が表示されます。犯人のプロセスは下部近くにあるはずです。
/ proc/[PID]/fdの各エントリは厳密にはファイル記述子であり、個別のオープンiノードではないことに注意してください。各個別のオープンiノードは、/ proc/[PID]/fdディレクトリのどこかに少なくとも1つの個別のファイル記述子が必要です。
ここでの問題は、部分的には、muninが「オープンiノード」によって意味することだと思います。 muninのデフォルトのインストールには、割り当てられたiノードの数を取得するための2つのプラグインがあります。
「/ etc/munin/plugins/open_inodes」は、「/ proc/sys/fs/inode-nr」からiノードメトリックを取得します。
そして
「/ etc/munin/plugins/df_inode」は、「df -i」の出力からメトリックを取得します。
これらの数は、システム上のすべてのプロセスによって使用されているファイル/ iノードの数ではなく、既存のファイルを反映しています。
たとえば、このスクリプトは10個のファイルを作成し、それが終了すると、「df -i」とinode-nrの両方でiノード割り当ての増加を確認できます。
#!/usr/bin/python
f0 = open("foo0", "w")
f1 = open("foo1", "w")
f2 = open("foo2", "w")
f3 = open("foo3", "w")
f4 = open("foo4", "w")
f5 = open("foo5", "w")
f6 = open("foo6", "w")
f7 = open("foo7", "w")
f8 = open("foo8", "w")
f9 = open("foo9", "w")
ただし、これを調整してプログラムが終了しないようにした場合(およびファイルが既に存在している場合)、ファイルはプロセスによって「開いた」状態で「使用中」のままになります。
#!/usr/bin/python
import time
f0 = open("foo0", "w")
f1 = open("foo1", "w")
f2 = open("foo2", "w")
f3 = open("foo3", "w")
f4 = open("foo4", "w")
f5 = open("foo5", "w")
f6 = open("foo6", "w")
f7 = open("foo7", "w")
f8 = open("foo8", "w")
f9 = open("foo9", "w")
time.sleep(600)
「lsof -p PID」の出力に反映されていることがわかります
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
open_some 6602 morgan 3w REG 254,1 0 262198 /home/morgan/src/foo0
open_some 6602 morgan 4w REG 254,1 0 262273 /home/morgan/src/foo1
open_some 6602 morgan 5w REG 254,1 0 262284 /home/morgan/src/foo2
open_some 6602 morgan 6w REG 254,1 0 262287 /home/morgan/src/foo3
open_some 6602 morgan 7w REG 254,1 0 262289 /home/morgan/src/foo4
open_some 6602 morgan 8w REG 254,1 0 262301 /home/morgan/src/foo5
open_some 6602 morgan 9w REG 254,1 0 262302 /home/morgan/src/foo6
open_some 6602 morgan 10w REG 254,1 0 262309 /home/morgan/src/foo7
open_some 6602 morgan 11w REG 254,1 0 262457 /home/morgan/src/foo8
open_some 6602 morgan 12w REG 254,1 0 268672 /home/morgan/src/foo9
しかし、この「開いたままにする」スクリプトは何度でも実行でき、df/inode-nrの数値は変更されません。
つまり、要するに、muninは、すべてのプロセスで使用されているすべてのiノードの数ではなく、割り当てられたiノードの数を報告しています。大量のファイルを削除した後、muninグラフに解放されたiノードが反映されない場合は、グラフが再生成されていないか、グラフの時間スケールが長すぎて反映できません。急変。
ログファイルが原因である場合、クリーンアップ時にiノードが解放されなかった可能性があります。これらのログファイルを開いたサービスを再起動してみてください。そうしないと、echo "" > logfilenamegoeshere
保存したいデータをログからバックアップした後。