以前、lsofコマンドで指定したポート番号を使用しているプロセスを知る方法、lsofコマンドで指定したファイルを掴んでいるプロセスを把握する方法を伝えしました。
今回はlsofコマンドでユーザが使用しているプロセスおよびファイルを確認する方法をご紹介します。
以下のように「-u」オプションに続けて、ユーザ名を指定します。
出力結果のうち、「COMMAND」欄がプロセス、「NAME」欄がファイル名です。(厳密にはファイル名じゃないものもありますが)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@kamotora ~]# lsof -u root COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 252,3 4096 2 / init 1 root rtd DIR 252,3 4096 2 / init 1 root txt REG 252,3 150352 654138 /sbin/init init 1 root mem REG 252,3 66432 523302 /lib64/libnss_files-2.12.so init 1 root DEL REG 252,3 523286 /lib64/libc-2.12.so init 1 root DEL REG 252,3 523666 /lib64/libgcc_s-4.4.7-20120601.so.1.#prelink#.YtztCy init 1 root DEL REG 252,3 523314 /lib64/librt-2.12.so init 1 root DEL REG 252,3 523310 /lib64/libpthread-2.12.so.#prelink#.ZOtQZY init 1 root DEL REG 252,3 523337 /lib64/libdbus-1.so.3.4.0.#prelink#.R0iPCb ~省略~ rsync 27727 root 4u IPv4 19370739 0t0 TCP *:rsync (LISTEN) rsync 27727 root 5u IPv6 19370740 0t0 TCP *:rsync (LISTEN) [root@kamotora ~]# |
出力結果が多いので省略しました。
何件出力されたかを「wc -l」で確認すると以下の通りでした。
1 2 3 |
[root@kamotora ~]#lsof -u root |wc -l 1326 [root@kamotora ~]# |
今回のようにユーザを指定することで、そのユーザが開いているファイル数のおおよその数を確認することができます。(lsofは「LiSt Open File」ってことからも読み取れますね)
このことは、OSのファイルディスクリプタの上限を変更する際に参考になります。
ファイルディスクリプタとは「nofile」のことで、開くことのできるファイルの数でユーザ毎に設定します。
ファイルを開こうとした際に「Too many open files」というエラーが出力された場合には、それ以上ファイルを開くことができないので、今回のlsofコマンドで調査を行い上限値をあげることで対応しましょう。