0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サーバー負荷調査の基本手順

0
Posted at

昔、まだVPSサーバーなんかをつかっていたころサーバーが重くてダウンし、その原因を探るなんてやっておりました。
いまだとモニタリングツールから一括でこれらを見ることが一般的でしょうし、サーバーに入ってコマンドを打つということは減ってきていると思いますが、昔の知識の復習も兼ねてまとめておきます。

Step 1: まず全体の状態を確認

ロードアベレージをチェック

$ uptime
 14:23:01 up 10 days,  3:42,  2 users,  load average: 2.50, 1.80, 1.45

判断方法:

# CPUコア数を確認
$ nproc
4

# ロードアベレージ ÷ コア数で判断
# 2.50 ÷ 4 = 0.625 → 問題なし
# 4.00 ÷ 4 = 1.0 → やや高い
# 8.00 ÷ 4 = 2.0 → 高負荷

目安:

  • 1.0未満: 余裕あり
  • 1.0〜2.0: 注意
  • 2.0以上: 高負荷(要調査)

Step 2: 原因を切り分ける

パターン① ロードアベレージが低いのに遅い

ネットワークが原因の可能性

# 接続数を確認
$ netstat -an | grep ESTABLISHED | wc -l

# 状態別に集計
$ netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c

よくある問題:

  • 接続数が異常に多い(数千〜数万)
  • CLOSE_WAIT が大量に残っている

パターン② ロードアベレージが高い

CPU / メモリ / ディスクI/O のどれかが原因

$ top

topの見方:

%Cpu(s): 25.0 us,  5.0 sy,  0.0 ni, 60.0 id, 10.0 wa
         ↑       ↑                  ↑       ↑
       ユーザー システム          空き時間  I/O待ち

Step 3: 原因別の詳細調査

ケース A: CPU使用率が高い(us + sy が 70%以上)

# CPU使用率の高いプロセスを確認
$ ps aux --sort=-%cpu | head -10

# 詳細を見る
$ top
# 表示中に「P」キーでCPU順にソート

対策:

  • 重いプロセスを特定して最適化
  • 不要なプロセスを停止
  • サーバー増強を検討

ケース B: I/O待ちが多い(wa が 20%以上)

# ディスクの状態を確認
$ iostat -x 1

重要な指標:

  • %util: 80%以上なら要注意
  • await: 20ms以上なら遅い
# どのプロセスがI/Oを使っているか
$ iotop

対策:

  • データベースのクエリを最適化
  • ログ出力を減らす
  • SSDに変更を検討

ケース C: メモリ不足(Swapが使われている)

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        5.1G        445M         12M        2.1G        1.9G
Swap:          2.0G        512M        1.5G
                           ↑
                     これが多いと危険

Swapが500MB以上使われている場合:

# メモリ使用率の高いプロセスを確認
$ ps aux --sort=-%mem | head -10

# スワップの入出力を監視
$ vmstat 1
# si(スワップイン)とso(スワップアウト)が継続的に発生していたら危険

対策:

  • メモリを食っているプロセスを特定
  • 設定を見直して使用量を削減
  • メモリ増設を検討

簡単フローチャート

[サーバーが重い]
    ↓
uptime でロードアベレージ確認
    ↓
┌───┴───┐
低い     高い
│        │
│        top で確認
│        │
│     ┌──┴──┐
│   CPU高い  wa高い  Swap使用
│     │      │       │
│   CPU調査  I/O調査  メモリ調査
│
netstat で確認

よく使うコマンドまとめ

コマンド 用途 見るポイント
uptime 負荷の全体確認 load average の値
top リアルタイム監視 CPU使用率、メモリ、wa
ps aux --sort=-%cpu CPU使用率順 どのプロセスが重いか
ps aux --sort=-%mem メモリ使用率順 どのプロセスがメモリを使っているか
free -h メモリ状況 Swap使用量
iostat -x ディスクI/O %util、await
netstat -an ネットワーク接続 接続数、状態
vmstat 1 総合監視 si/so(スワップ)、r(待ちプロセス)

調査の基本ルール

  1. まず全体を見る: uptimeとtopで状況把握
  2. 原因を絞る: CPU/メモリ/I/O/ネットワークのどれか
  3. プロセスを特定: psコマンドで犯人を見つける
  4. 対策する: 最適化 or リソース追加

ポイント: 一度に全部見ようとせず、順番に調べていくことが大事です。


すぐに使える調査テンプレート

サーバーが重いと言われたら、まずこれを実行:

# 1. 全体確認
uptime
top -n 1

# 2. CPU確認
ps aux --sort=-%cpu | head -10

# 3. メモリ確認
free -h
ps aux --sort=-%mem | head -10

# 4. ディスク確認
iostat -x 1 3

# 5. ネットワーク確認
netstat -an | grep ESTABLISHED | wc -l

この結果を見れば、だいたいの原因がわかります。


参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?