nfsなりdbへ接続するプロセスがあったとして接続先が原因でプロセスのIO刺さることは多々ある。
刺さったプロセスがどこに対するIOでその状態になったかを特定する方法の記事
# 刺さったプロセスのPIDを取得
$ ps aux | grep "プロセス名"
# pidから開いているソケットを確認
$ ls -l /proc/${PID}/fd
# straceを使ってfdの番号を取得
$ strace -p ${PID}
# fdを取得したらsocketの接続先を取得する
$ readlink /proc/${PID}/fd/${↑で取得したfd}
# ソケットのinodeを頼りにnetstatでgrep
$ netstat -antep | grep ${↑で取得したinode}
straceでソケットを取得する方法が意外にもlsofが入ってる環境なら
$ lsof -i -a -p $PID
だけで取得できてしまう。
やってることはファイルディスクリプタとソケットの話がわかればとっても簡単だけどlsofで一発で取れちゃう。
この他にも/proc/net/tcp
から取得する方法もあるとのこと。16進数への変換やらが必要なので手数的にはこっちの方が少ないので使い分けるのも良さそう。
http://blog.1q77.com/2020/10/socket-in-proc-pid-fd/