このページは先行公開版です。内容は今後予告なく更新される可能性があります。
Helm チャートの値を表示
helm show values dify/dify
1. リソース割り当ての改善
- Helm チャート内の各サービスのリソース割り当てを調整することで、Dify のパフォーマンスを向上させることができます。
- 使用している環境やリソース状況に応じて値を増やしてください。
- 各コンポーネントの推奨設定:
| 分類 | コンポーネント | Replicas | Request CPU | Request Mem | Limit CPU | Limit Mem | 備考 |
|---|
| コアアプリ | API | 6 | 1 | 1 GB | 1 | 2 GB | ① |
| Worker | 2 | 4 | 4 GB | 4 | 8 GB | ② |
| Worker Beat | 1 | 1 | 2 GB | 2 | 4 GB | |
| Web | 1 | 0.5 | 1 GB | 1 | 2 GB | |
| Sandbox | 1 | 2 | 2 GB | 2 | 4 GB | ③ |
| エンタープライズ | Enterprise | 1 | 2 | 2 GB | 2 | 2 GB | |
| Enterprise_Audit | 1 | 1 | 2 GB | 2 | 4 GB | |
| Enterprise_Frontend | 1 | 1 | 2 GB | 1 | 2 GB | |
| プラグイン | Plugin Daemon | 1 | 1 | 2 GB | 2 | 4 GB | |
| Plugin Controller | 1 | 0.5 | 1 GB | 1 | 2 GB | |
| Plugin Connector | 1 | 1 | 2 GB | 1 | 2 GB | |
| Plugin Manager | 1 | 1 | 2 GB | 2 | 4 GB | |
| 基盤 | SSRF Proxy | 1 | 0.5 | 0.5 GB | 1 | 1 GB | |
| Gateway | 1 | 1 | 2 GB | 2 | 4 GB | |
| Unstructured | - | - | - | - | - | 必要に応じて |
| MinIO | - | - | - | - | - | 必要に応じて |
備考説明:
- ① API:必要に応じて replica を水平スケール
- ② Worker:必要に応じて replica を水平スケール(大量のファイルアップロードがある場合)
- ③ Sandbox:必要に応じて replica を水平スケール(大量の計算タスクがある場合)
maxWorkers: 4(ワーカープロセス数)
workerTimeout: 15(呼び出しタイムアウト)
設定例:
api:
replicas: 6
resources:
requests:
cpu: 1
memory: 1Gi
limits:
cpu: 1
memory: 2Gi
worker:
replicas: 2
resources:
requests:
cpu: 4
memory: 4Gi
limits:
cpu: 4
memory: 8Gi
sandbox:
replicas: 1
maxWorkers: 4
workerTimeout: 15
resources:
requests:
cpu: 2
memory: 2Gi
limits:
cpu: 2
memory: 4Gi
2. 外部 PostgreSQL のパフォーマンス向上
2.1 データベース最大接続数の計算
データベースを設定する際、以下の式を使用して必要な最大接続数を計算する必要があります:
最大接続数 = (SQLALCHEMY_POOL_SIZE + SQLALCHEMY_MAX_OVERFLOW) × API Worker数 × API Replicas数
+ (SQLALCHEMY_POOL_SIZE + SQLALCHEMY_MAX_OVERFLOW) × Worker Worker数 × Worker Replicas数
パラメータ説明:
SQLALCHEMY_POOL_SIZE: 各 worker のデータベース接続プールサイズ
SQLALCHEMY_MAX_OVERFLOW: プールがオーバーフローした際の追加接続数
API Worker数: API サービスの serverWorkerAmount
Worker Worker数: Worker サービスの celeryWorkerAmount
計算例:
以下の設定を想定:
- API: replicas=6, serverWorkerAmount=1
- Worker: replicas=2, celeryWorkerAmount=1
- SQLALCHEMY_POOL_SIZE=100
- SQLALCHEMY_MAX_OVERFLOW=150
最大接続数は:
(100 + 150) × 1 × 6 + (100 + 150) × 1 × 2 = 1500 + 500 = 2000
計算結果に対して 20-30% の余裕を持たせることを推奨します。トラフィックの急増に対応するためです。上記の例では、max_connections を 2400-2600 に設定することをお勧めします。
2.2 完全な設定例
api:
replicas: 6
serverWorkerAmount: 1
extraEnv:
- name: SQLALCHEMY_POOL_SIZE
value: "100"
- name: SQLALCHEMY_MAX_OVERFLOW
value: "150"
resources:
requests:
cpu: 1
memory: 1Gi
limits:
cpu: 1
memory: 2Gi
3. パフォーマンス監視の推奨事項
3.1 主要なメトリクス
システムが正常に動作していることを確認するため、以下のメトリクスを監視してください:
データベース接続:
- 現在のアクティブ接続数
- 接続プール使用率
- 接続待ちリクエスト数
リソース使用状況:
- CPU 使用率(70% 以下を推奨)
- メモリ使用率(80% 以下を推奨)
- ディスク I/O
アプリケーションパフォーマンス:
- API レスポンスタイム
- Worker タスクキューの長さ
- タスク実行時間
3.2 一般的なパフォーマンスボトルネック
| 症状 | 考えられる原因 | 解決策 |
|---|
| API レスポンスが遅い | API replicas が不足 | API replicas を増やす |
| タスクが蓄積される | Worker の処理能力不足 | Worker replicas または celeryWorkerAmount を増やす |
| データベース接続の枯渇 | 接続数の設定不足 | max_connections を増やすか接続プールを最適化 |
| メモリ不足 | メモリ上限が低すぎる | memory limits を増やす |
| CPU スロットリング | CPU 上限が低すぎる | CPU limits を増やす |