【第7回】サーバーの異常を検知せよ!プロセス管理とシステム監視の実践|新入社員のためのLinux基礎講座

こんにちは、リナックス先生です。全8回の連載もいよいよ終盤、第7回を迎えました。ここまでの学習で、あなたはサーバーを構築し、設定を変更し、公開するスキルを身につけました。しかし、エンジニアの真価が問われるのは、実は「構築」よりも「トラブルが起きた時」なのです。

「サイトの表示が急に重くなった」「設定を変えていないのにサービスが止まった」……こうした事態に直面した際、サーバーの内部で何が起きているのかを可視化する技術、それがプロセス管理とシステム監視です。AlmaLinux 9を支える心臓部を覗き見て、トラブルに強いエンジニアへの一歩を踏み出しましょう。

コウ君

先生!急にサーバーとの接続が重くなって、コマンドの反応も遅い気がします。ウイルスに感染したんでしょうか?それとも壊れちゃったんですか!?

リナックス先生

落ち着いて、コウ君。パニックになる前に、まずは「数字」を見るのがプロよ。CPUを使いすぎているプログラムがあるのか、メモリが足りないのか。Linuxにはサーバーの健康状態をリアルタイムで教えてくれる道具がたくさんあるの。一緒に診察してみましょう!

【全8回】新入社員のためのLinux基礎講座:カリキュラム一覧

  • 第1回:ConoHa VPSで始めるAlmaLinux 9環境構築とSSH接続の極意
  • 第2回:現場で迷わない!標準ディレクトリの役割と効率的なファイル操作コマンド
  • 第3回:セキュリティの基本!rootに頼らない適切な権限設計とsudoの運用
  • 第4回:DNF徹底攻略。dnfコマンドの使い方とWebサーバー(Apache)のセットアップ
  • 第5回:firewalldとIPアドレスの理解。サービスを安全に公開するための通信制御
  • 第6回:エンジニアの嗜み「Vim」の操作と、タイムゾーン・ロケール等のシステム設定
  • ▶ 第7回:サーバーが重い原因を探る!systemdの操作とリソース監視(今ここ!)
  • 第8回:運用のプロへの第一歩。バックアップ処理を自動化するシェルスクリプトの作成

1. プロセスとは?Linuxが仕事をこなす仕組み

Linuxにおけるプロセスとは、実行中のプログラムのことです。例えば、あなたが第4回で起動したApacheも、一つのプロセスとしてメモリ上で動いています。

Linuxは「マルチタスク」なOSなので、目に見えないところで何百ものプロセスが同時に動いています。それぞれのプロセスには PID(プロセスID) という固有の番号が振られ、OSはこの番号で誰がどれだけCPUやメモリを使っているかを管理しています。


2. 健康診断の三種の神器:top, ps, free

サーバーの状態を調べる際、プロが真っ先に叩くコマンドを紹介します。

① リアルタイム監視の top

top

Windowsの「タスクマネージャー」に相当します。

  • %CPU: どのプロセスがCPUを食っているか。
  • %MEM: メモリの使用率。
  • COMMAND: プログラムの名前。

※ 終了するには q キーを押します。

② プロセスのスナップショット ps

# 現在動いているすべてのプロセスを表示
ps aux

# 特定のプロセス(例:apache)だけを探す
ps aux | grep httpd

③ メモリ使用量の確認 free

free -h

-h (human-readable) オプションを付けることで、GBやMB単位で読みやすく表示されます。available の値が少なくなっていたら、メモリ不足のサインです。

💡 プロのノウハウ:Load Average(ロードアベレージ)の読み方
topコマンドの右上に表示される「load average」は、CPUの処理待ち行列の長さを示します。CPUコア数以上の数値が継続している場合、そのサーバーは「過労状態」です。急激に跳ね上がっている時は、誰かが重い処理(コンパイルやバックアップなど)を回していないか確認しましょう。


3. systemd (systemctl) でサービスを支配する

最近のLinux(AlmaLinux 9含む)において、プロセスの親玉として君臨しているのが systemd です。個別のプログラムではなく「サービス」という単位で管理します。

# サービスの状態を確認(詳細なログも出ます)
systemctl status httpd

# サービスが異常終了した場合に再起動する
sudo systemctl restart httpd

# 全サービスの一覧を表示し、起動に失敗しているものがないか見る
systemctl list-units --type=service --state=failed

現場でのトラブル対応は、まず systemctl status を見て、そこに表示される最新のログ(エラーメッセージ)から原因を特定するのが定石です。


4. 現場の流儀:ゾンビプロセスとkillコマンド

暴走して止まらなくなったプロセスや、終了したはずなのに残っている「ゾンビプロセス」を強制終了させる武器、それが kill コマンドです。

# 1. 殺したいプロセスの PID を特定する
ps aux | grep [アプリ名]

# 2. 優しく終了を促す(推奨)
sudo kill [PID]

# 3. 何をしても止まらない時に強制排除(最終手段)
sudo kill -9 [PID]

⚠️ トラブルシューティング / 注意点
kill -9 は非常に強力ですが、保存されていないデータを破壊したり、データベースのファイルを壊したりするリスクがあります。現場では「まず kill、それでもダメなら kill -9」という順序を徹底してください。また、PIDを間違えて自分自身のSSHプロセスを殺すと接続が切れるので注意!


5. まとめと次回予告

第7回では、サーバーの「内部状況」を正確に把握する手法を学びました。

  • top でリアルタイムの負荷を、ps でプロセスの詳細をチェックする。
  • free でメモリの空き容量を常に意識する。
  • systemctl でサービスを管理し、異常があればログを追う。
  • 暴走プロセスには kill で対処するが、使い方は慎重に。

これで、トラブルが起きても「どこを見ればいいか」が分かるようになりました。いよいよ次回は本連載の最終回です!

第8回のテーマは「シェルスクリプトによる自動化入門」です。これまで学んできたバラバラのコマンドを一本の「プログラム」にまとめ、面倒なバックアップ作業などを自動化する、エンジニアにとって最もクリエイティブで楽しい工程に挑戦しましょう。完走まであと一歩です。お楽しみに!

▼ サーバー構築・開発を学ぶならVPSで ▼

エンジニア必須の環境
「おすすめVPS」

VPSランキングを見る

技術スキルを活かす
「ITエンジニア転職」

転職エージェントを見る

コメント