夜中の3時、データセンターのサーバーラックが並ぶ冷たい通路で、アラート通知の音に叩き起こされる。そんな経験を何度繰り返したことか。
エンジニアとして駆け出しの頃、サーバーの調子が悪いと聞くと、まずは「どのポートが死んでるんだ?」と焦ってあれこれコマンドを叩いていました。その時に頼りになるのが、通信の入り口と出口を教えてくれる「ソケット情報」です。
今日は、そんなトラブルシューティングの現場で「なぜ古参の netstat ではなく、現代の ss コマンドを使うべきなのか」を、皆さんと一緒に紐解いていきたいと思います。
—
なぜ「昔の常識」が通用しなくなるのか?
まず、ネットワークの通信を「郵便配達」に例えてみましょう。サーバーという巨大なマンションには、数千、数万という「部屋(ポート)」があります。
netstatというベテラン配達員:
昔から愛されてきた netstat は、一つひとつの部屋をノックして「誰かいますか?」「何番の部屋と繋がってますか?」と手作業で聞き回るような仕組みです。サーバーが落ち着いているときはいいのですが、数万もの同時接続があるような今どきのWebサービスだと、あまりの忙しさに配達員がパンクしてしまい、結果が出るまでに数秒、下手すれば数十秒も待たされてしまいます。
ssという現代のスペシャリスト:
一方で ss コマンドは、マンションの管理室(カーネルの netlink という場所)に直接駆け込み、「現在の全居住者のリストを今すぐ出せ!」とデータを引き抜いてきます。一軒ずつノックする必要がないので、たとえ接続数が膨大でも、驚くほどの速さで答えを返してくれるんです。
—
さっそく ss コマンドを使ってみよう
「速いのはわかったけど、使い方が難しいんじゃないの?」と思われるかもしれませんが、大丈夫です。基本的には netstat と同じような感覚で使えます。
まずは、サーバーで今どのような通信が待ち受けているか(LISTEN状態)を確認してみましょう。
# 全てのTCPポートの待ち受け状況を表示
# -t: TCPを表示
# -l: 待ち受け(LISTEN)ポートのみ表示
# -n: ポート番号などを名前解決せず数値で表示(高速化のため必須!)
ss -tln
このコマンドを叩いた瞬間、画面にズラリと情報が表示されるはずです。ここで重要なのが -n オプションです。これを忘れると、いちいちIPアドレスやポート番号を「Google検索」のように名前解決しに行ってしまい、せっかくの ss の速さが台無しになってしまいます。現場では「 -n は絶対に忘れるな」と口を酸っぱくして教えるほどです。
—
現場で役立つ「絞り込み」テクニック
トラブルが起きているとき、膨大なリストの中から目的の通信を探すのは至難の業ですよね。そんなときは、grep と組み合わせるよりも、ss 自体のフィルター機能を使うのがスマートです。
例えば、「80番ポート(HTTP)に誰が繋いでいるか知りたい!」という時はこう書きます。
# 80番ポートに接続されている通信だけを抽出
ss -tn 'sport = :80'
これだけで、特定の部屋に誰が来ているかピンポイントで特定できます。さらに、特定のIPアドレスからの接続だけを見たい場合は、こんな風に書くこともできます。
# 特定のIPアドレスからの接続をフィルタリング
ss -tn dst 192.168.1.10
—
netstat からの卒業に向けて
「まだ netstat で十分じゃない?」と思うかもしれませんが、実は多くのLinuxディストリビューションでは、すでに netstat は「非推奨(もうすぐ引退する機能)」扱いになっています。
現場でトラブルが発生した際、数千のコネクションが溜まっている状況で netstat を叩くと、そのコマンド自体の負荷でサーバーがさらに重くなる……なんていう「笑えない悲劇」も過去にはありました。
- まずは
ss -tlnを癖にする - 次に
ss -tnpで「どのプロセスが通信しているか」を追う(-pはプロセス名を表示します)
この2つを覚えるだけで、あなたはもう「ネットワークの迷宮」で迷子になることはありません。
—
最後に:ツールは「直感」を支える武器
技術の世界は日進月歩ですが、根本的な「何が起きているかを知りたい」という欲求は変わりません。ss コマンドは、単に速いだけの道具ではなく、あなたが困ったときに「今、サーバーの中で何が起きているのか」を、冷徹かつ正確に教えてくれる頼もしい相棒です。
最初は黒い画面に文字が流れるだけで緊張するかもしれませんが、一歩ずつコマンドを叩いて、自分の環境でどう動くのかを眺めてみてください。その積み重ねが、いつか深夜のデータセンターであなたを救う「確かな技術力」に変わるはずです。
それでは、また次回のブログでお会いしましょう。皆さんのネットワークが、今日も平和でありますように。
コメント