削除プロセスを終了すると、メモリキャッシュをクリーンアップするのに役立つ可能性があるかどうかを知りたいです。時にはlsofから削除されたファイルがたくさんあるので、そのプロセスを終了するとより多くの空きメモリを提供できますか?
例:
lsof | grep delete
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/42/gvfs
Output information may be incomplete.
cupsd 1619 root 10r REG 253,0 2979 38250477 /etc/passwd+ (deleted)
gnome-set 5731 gdm 14r REG 253,0 65536 51102558 /etc/pki/nssdb/cert8.db;5c644c01 (deleted)
gnome-set 5731 gdm 16r REG 253,0 16384 51197440 /etc/pki/nssdb/key3.db;5c644c01 (deleted)
pool 5731 5795 gdm 14r REG 253,0 65536 51102558 /etc/pki/nssdb/cert8.db;5c644c01 (deleted)
kill 1619
削除されたプロセスがメモリを消費するかどうか心配されます。
私達はまた次を見ることができます:
lsof | grep deleted | wc -l
3421
答え1
多くの場合、プロセスは明示的にファイルを作成し、開いて直接削除してファイル操作をより安全にし、プロセスの終わりにファイルを削除します。
簡単に言えば、これは特にあなたの質問に表示されるファイルの機能です。これらのプロセスを終了すると、システムの動作が中断されます。
場合によっては、削除されたファイルがまだ開いているのがバグである可能性があります。たとえば、プロセスはログファイルに書き込んでいますが、ログファイルを再度開くというシグナルをプロセスに送信せず、ログファイルは圧縮され削除されます。ファイルシステムを介してこれらのファイルを切り取ることができます/proc/
。上記のようにファイル記述子番号を見つけて、ファイルを切り捨てますlsof
(> /proc/12345/fd/123
12345はプロセスID、123はファイル記述子番号ですが、これはほとんど必要ありません)。
プロセスは削除されず、そのファイルを参照するディレクトリエントリのみが削除されました。
答え2
使用するソフトウェア/ソリューションに応じて、既知または許可されているベースラインを定義する必要があります。
時間が経つにつれてかなりの速度で増加しない場合、削除されたファイルはシステムにまだ開いているか存在するものに固執しません。これで、システム/VMの正常な基準から大きな偏差がある場合は、心配する必要があるかもしれません。
私たちは最近、いくつかのソフトウェアベンダーに共通して適用されるシステムで、約20〜50,000個の削除されたファイルが基準から外れていることを発見しました。 lsofを完了するのに約5分かかり、ディスク容量が不足していました。
結局、私たちはベンダーが一時ファイルを開いて削除するいくつかのJavaルーチンを開発したことに違いありません。いいえ閉じてください。私たちはベンダーにバグを提出し、疑わしいファイルを識別し、ベンダーはコードを修正しました。また、このソリューションは、大量のデータパーティションを持つLinuxで開かれたファイル制限に達する可能性があることを顧客とベンダーに指摘しています。