【入門編】 ssコマンドによる高速なソケット情報収集とnetstatとの性能比較 – トラブルシューティング&ネットワーク運用監視実践ガイド

夜中の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 コマンドは、単に速いだけの道具ではなく、あなたが困ったときに「今、サーバーの中で何が起きているのか」を、冷徹かつ正確に教えてくれる頼もしい相棒です。

最初は黒い画面に文字が流れるだけで緊張するかもしれませんが、一歩ずつコマンドを叩いて、自分の環境でどう動くのかを眺めてみてください。その積み重ねが、いつか深夜のデータセンターであなたを救う「確かな技術力」に変わるはずです。

それでは、また次回のブログでお会いしましょう。皆さんのネットワークが、今日も平和でありますように。

コメント

タイトルとURLをコピーしました