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 + P や Shift + M)して、リソースを消費しているプロセス(docker や python など)を見つけます。
追加推奨: 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運用での監視まとめ
- 「遅い」と感じたら、まず
vmstat -t 2を実行。 si/soが動いていたら「メモリ不足」。rがCPUコア数よりずっと多い、またはusが高ければ「CPU不足」(AI処理の過多)。waが高ければ「ディスクI/O不足」(ナレッジベースの読み込みやログがボトルネック)。- CPU不足なら
htopで、どのdockerやpythonプロセスが原因か特定します。
これらのコマンドを使いこなし、Difyサーバーの「声」を聞くことで、安定したAIチャットボット環境を維持しましょう。


コメント