地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

ネットワークIOで刺さったプロセスの接続先を探す

nfsなりdbへ接続するプロセスがあったとして接続先が原因でプロセスが刺さることは多々ある。

刺さったプロセスがどこに対するIOでその状態になったかを特定する方法

# 刺さったプロセスのPIDを取得
$ ps aux | grep "プロセス名"

# pidから開いているソケットを全探索
$ ls -l /proc/${PID}/fd

# straceを使ってfdの番号を取得
$ strace -p ${PID}

# fdを取得したらreadlinkでシンボリックリンクのリンク先を表示する
$ readlink /proc/${PID}/fd/${↑で取得したfd}

# ソケットのinodeを頼りにnetstatでgrep
$ netstat -ne | grep ${↑で取得したinode}

straceでソケットを取得する方法が意外にもlsofが入ってる環境なら

$ lsof -i -a -p $PID

だけで取得できてしまう。

unix.stackexchange.com

やってることはファイルディスクリプタとソケットの話がわかればとっても簡単だけどlsofで一発で取れちゃうのはすごい。。

linuxjm.osdn.jp