DifyサーバーのためのLinux負荷監視 基本ガイド

Dify環境構築

Difyを安定して稼働させるためには、サーバーが処理しているタスクの「重さ」(負荷)をリアルタイムで把握し、問題が発生する前兆を掴むことが非常に重要です。

この記事では、Difyサーバーの「健康診断」に役立つ、Linuxの基本的な負荷監視コマンドについて、その見方とDify運用における注意点を解説します。

なぜ負荷監視が必要か?

Difyは、AIモデルの推論、ナレッジベース(RAG)の検索、Webリクエストの処理など、CPU、メモリ、ディスクI/Oに同時に負荷をかける可能性があるアプリケーションです。

  • 「なんだかDifyの応答が遅い」
  • 「突然チャットボットが応答しなくなった」

といった問題が発生した際、これらのコマンドを使って「サーバーのどこがボトルネックになっているのか(CPUが100%なのか、メモリが尽きたのか、ディスクの読み書きで詰まっているのか)」を特定する必要があります。

1. 【最重要】vmstat:システム全体の「総合診断」

vmstat は、システム全体の負荷(プロセス、メモリ、スワップ、I/O、CPU)を一覧表示する、最も基本的で強力なコマンドです。まずはこれを覚えるのがおすすめです。

vmstat -t 2 と実行すると、2秒ごと(2)に、タイムスタンプ付き(-t)で情報を更新し続けます。

$ vmstat -t 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ ---timestamp---
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 549556 125964 1163460    0    0     8    28  160  180  1  0 99  0  0 2024-10-23 10:30:00 JST
 2  1      0 549320 125964 1163484    0    0  7576   120 2141 6093 13 17 40 30  0 2024-10-23 10:30:02 JST
^C (Ctrl+Cで停止)

特に注目すべき項目:

項目 意味 Dify運用での見方
procs (プロセス)
r 実行待ちプロセス数 ここが常にCPUコア数より多い場合、CPUが処理しきれていません。 DifyのAI処理が追いついていない可能性があります。
b I/O待ちプロセス数 ディスクの読み書き(ナレッジベース検索など)で待たされているプロセス数。
memory (メモリ)
free 空きメモリ この数値が小さくても、cache が多ければ問題ないことが多いです。
cache ページキャッシュ 一度読み込んだファイル(ナレッジベースなど)を一時的に保存しているメモリ。
swap (スワップ)
si スワップイン ここが 0 以外になるのは危険信号。 メモリ不足でディスクをメモリ代わりに使い始めており、極端に遅くなります。
so スワップアウト si と同様、0 以外が続く場合はメモリ不足を疑います。
io (ディスクI/O)
bi ブロックイン (読込) ディスクからの読み込み量。ナレッジベースの読み込みなどで増加します。
bo ブロックアウト (書込) ディスクへの書き込み量。Difyのログ書き込みなどで増加します。
cpu (CPU使用率)
us ユーザー時間 アプリケーション(Dify本体やAIモデル)が使用したCPU率。
sy システム時間 OS(カーネル)が使用したCPU率。I/O処理などが多いと増えます。
id アイドル時間 CPUが「暇」な時間。100 - id がおおよそのCPU使用率です。
wa I/O待ち時間 ここが高い場合、CPUは暇なのにディスクが遅くて待たされている状態です。 ディスク性能がボトルネックです。

2. top / htop:リアルタイムの「犯人特定」

vmstat で「CPUが怪しい」と分かったら、top で「どのプロセスがCPUを使っているのか」を特定します。

$ top

top はリアルタイムでプロセス一覧を更新します。%CPU%MEM でソート(Shift + PShift + M)して、リソースを消費しているプロセス(dockerpython など)を見つけます。

追加推奨: htop top は標準で入っていますが、htop はカラー表示やマウス操作に対応しており、非常に見やすい高機能版 top です。

# Ubuntu/Debian系
sudo apt update
sudo apt install htop

# 実行
htop

3. dstat:便利な「オールインワン」ダッシュボード

dstat は標準では入っていませんが、vmstat の後継とも言える非常に便利なコマンドです。CPU(コアごと)、ディスク(デバイスごと)、ネットワーク(インターフェースごと)の状況をまとめて表示できます。

# Ubuntu/Debian系
sudo apt update
sudo apt install dstat

# 実行 (時刻、全CPU、ディスク、ネットワークをフル表示)
$ dstat -taf
----system---- -------cpu0-usage------ -------cpu1-usage------ --dsk/vda---- -net/eth0- ---paging-- ---system--
  date/time   |usr sys idl wai hiq siq|usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
23-10 10:35:01|  1   0  99   0   0   0|  0   1  99   0   0   0|  12k   22k|  66B  300B|   0     0 | 480   622 
23-10 10:35:02|  2   1  97   0   0   0|  1   0  99   0   0   0|   0     0 |  66B   66B|   0     0 | 466   601 

Difyがマルチコアをどれだけ効率よく使えているか(-taf-f オプション)や、ネットワーク送受信量(net/eth0)を監視するのに便利です。

4. ps:特定の「プロセススナップショット」

ps は、top のようにリアルタイムではなく、実行した瞬間のプロセスの状態を表示します。Dify (Docker) のプロセスが正しく起動しているか確認する際によく使います。

  • ps auxf: 全ユーザーのプロセスを、親子の関係(ツリー)が分かるように表示します。
  • ps -efH: auxf とほぼ同じですが、System V系のオプションです。
$ ps auxf
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0 169924 13356 ?        Ss   10:00   0:01 /sbin/init
...
root        1234  0.1  0.5 123456 89012 ?        Sl   10:01   0:15  \_ docker-proxy ...
root        5678  1.5 10.2 987654 456789 ?       Sl   10:01   1:30      \_ python3 ... (これがDifyのプロセス)

5. その他の補足コマンド

コマンド 用途
free -m メモリの状況をメガバイト(-m)単位で分かりやすく表示します。available(利用可能)なメモリ量に注目します。
iostat -dmxt 1 1秒ごとにディスクのI/O状況(d)、メガバイト単位(m)、拡張情報(x)、時刻(t)を表示します。%util(使用率)や await(待ち時間)でディスクの詰まり具合を確認できます。(sysstat パッケージが必要)
sar 過去の負荷履歴(CPU、メモリ、ディスク)を後から確認できます。常時監視に便利です。(sysstat パッケージが必要)

Dify運用での監視まとめ

  1. 「遅い」と感じたら、まず vmstat -t 2 を実行。
  2. si/so が動いていたら「メモリ不足」。
  3. r がCPUコア数よりずっと多い、または us が高ければ「CPU不足」(AI処理の過多)。
  4. wa が高ければ「ディスクI/O不足」(ナレッジベースの読み込みやログがボトルネック)。
  5. CPU不足なら htop で、どの dockerpython プロセスが原因か特定します。

これらのコマンドを使いこなし、Difyサーバーの「声」を聞くことで、安定したAIチャットボット環境を維持しましょう。

コメント

error: Content is protected !!