UNIXドメインソケット通信の内容を見たい

  • 238
    Like
  • 1
    Comment
More than 1 year has passed since last update.

UNIX domain socket 通信は同一マシン上のプロセス間通信にしか使えないというデメリットがありますが,tcp 通信よりも圧倒的にパフォーマンスが良いので要求仕様的に使わなければならない局面は多いと思います

今回はフロントに Nginx で proxy して同一マシン上の別プロセスで動いているアプリケーションサーバーに対して UNIX domain socket 通信を行う構成で実際のアプリケーションサーバーに流れている通信を見たい時にどうするか書きます

実際にトラブルが起こった時に実際にどのような通信が流れているのかは tcp 通信なら tcpdump をすれば見れますが,UNIX domain socket 通信の場合は容易に見ることが出来ないので実際のアプリケーションサーバーにどのような通信が流れているのか分かりません

しかしアプリケーションサーバーにどのような通信が流れているのかどうしても見たい局面も多いと思います

そんな UNIX domain socket 通信の内容を見る一番手軽な方法は strace だと思います

strace はシステムコールを trace するツールですが,IO 周りは当然システムコールですので UNIX domain socket 通信の内容も見ることが出来ます

以下の記事が非常に有用でした

strace コマンドの使い方をまとめてみた - sonots:blog

例えばアプリケーションサーバーをデーモンとして起動していて,かつ単一プロセスの複数スレッドで動作をしていて.かつ通信の内容をできるだけ長く見たい場合は以下のようにオプションを指定します

strace -s 1024 -f -p [pid]

これで実際に通信を行えば UNIX domain socket でやり取りする様子が見れるのでこれで通信内容を見ることができます