Open3
性能関連

アプリケーションリソース計画チートシート
基本サイジング指標
負荷レベル | 秒間リクエスト (RPS) | 推奨構成 | 備考 |
---|---|---|---|
低負荷 | < 50 RPS | 2 vCPU, 4GB RAM, 1-2 VM | 小規模サービス、社内ツールなど |
中負荷 | 50-500 RPS | 4 vCPU, 8GB RAM, 2-4 VM | 中規模Webサービス、部門向けアプリケーション |
高負荷 | 500-2000 RPS | 8 vCPU, 16GB RAM, 4-8 VM | 大規模Webサービス、ユーザー数の多いアプリケーション |
超高負荷 | > 2000 RPS | 16+ vCPU, 32+ GB RAM, 8+ VM | 大規模プラットフォーム、ECサイトなど |
データベースサイジング
レコード数 | 推奨DB構成 | スケーリング方針 |
---|---|---|
< 100万 | 2 vCPU, 4GB RAM | シングルインスタンスで十分 |
100万-1000万 | 4 vCPU, 8-16GB RAM | レプリカ追加を検討 |
1000万-1億 | 8+ vCPU, 32+ GB RAM | レプリカ + シャーディング検討 |
> 1億 | カスタム設計 | 完全なシャーディング戦略が必要 |
オートスケーリングの目安
指標 | スケールアウトトリガー | スケールイントリガー |
---|---|---|
CPU使用率 | > 70% (5分間持続) | < 30% (10分間持続) |
メモリ使用率 | > 80% (5分間持続) | < 40% (10分間持続) |
応答時間 | > 500ms (3分間持続) | < 100ms (10分間持続) |
キュー長 | > 1000 (2分間持続) | < 100 (5分間持続) |
アプリケーション特性によるメモリ調整
アプリケーション特性 | 追加メモリ目安 | 備考 |
---|---|---|
キャッシュ多用 | +50〜100% | Caffeine, Hazelcast等のローカルキャッシュ使用時 |
ファイル処理 | +25〜50% | 画像処理、ドキュメント生成等 |
バッチ処理 | +100〜200% | 大量データ処理、ETL処理等 |
WebSocketサポート | +20〜40% | 接続数に依存 |
JWTなどの認証処理 | +10〜20% | トークン検証量に依存 |
JVMチューニング推奨設定
VM規模 | 推奨JVMオプション | 備考 |
---|---|---|
小規模 (2-4GB) | -Xms2g -Xmx3g -XX:+UseG1GC |
デフォルトのG1GCで十分 |
中規模 (8GB) | -Xms6g -Xmx7g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 |
GCポーズ時間を調整 |
大規模 (16GB+) | -Xms12g -Xmx14g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError |
OOMの際のデバッグ支援 |
アプリケーションタイプ別の推奨構成
アプリケーションタイプ | 推奨構成 | 特記事項 |
---|---|---|
REST API (ステートレス) | 4 vCPU, 8GB RAM, オートスケーリング | 水平スケーリングが容易 |
MVC Webアプリ | 4 vCPU, 8GB RAM, セッション複製 | セッション管理に注意 |
バッチ処理 | 8 vCPU, 16+GB RAM | 処理データ量に応じて調整 |
マイクロサービス | 2 vCPU, 4GB RAM/サービス | サービスごとに独立スケーリング |
データアクセスパターン別の推奨構成
データアクセスパターン | DB接続プール | キャッシュ戦略 | 備考 |
---|---|---|---|
読み取り主体 (10:1) | 小さめ (10-20) | Read-Through キャッシュ | レプリカ活用 |
書き込み主体 (1:1) | 中程度 (20-50) | 最小限のキャッシュ | シャーディング検討 |
読み書きバランス | 中程度 (20-50) | 時間ベースのキャッシュ無効化 | レプリカラグ注意 |
複雑クエリ多用 | 小さめ (10-20) | 結果セットキャッシュ | インデックス最適化 |
負荷テスト目標値
メトリクス | 目標値 | 警戒値 |
---|---|---|
応答時間 (P95) | < 300ms | > 1秒 |
エラー率 | < 0.1% | > 1% |
スループット安定性 | 変動 < 10% | 変動 > 30% |
CPU使用率 | < 60% | > 80% |
メモリ使用率 | < 70% | > 85% |
本番環境におけるモニタリング重要指標
- JVM ヒープ使用率とGC頻度
- スレッドプール飽和度
- データベース接続プール使用率
- HTTP応答時間 (P50, P95, P99)
- 外部サービス呼び出し応答時間
- キュー長(存在する場合)
- ビジネスKPI (ユーザーアクション完了率など)

Javaでの性能見積もりを簡単に行う方法をお教えします。
メモリ消費量の見積もり
基本的なオブジェクトサイズ
// 一般的なオブジェクトのメモリ使用量
String(10文字) ≈ 56バイト
Integer ≈ 24バイト
Long ≈ 24バイト
配列のオーバーヘッド ≈ 24バイト
簡単な計算例
// 例:1レコード = String×3 + Integer×2 の場合
1レコード ≈ (56×3) + (24×2) = 216バイト
100レコード ≈ 216バイト × 100 = 21.6KB
実行時間の見積もり
一般的な処理速度(目安)
メモリ内ループ処理: 1万回/ミリ秒
DB接続確立: 10-50ms
Simple INSERT: 1-5ms/件
SELECT with INDEX: 1-10ms
あなたのケースの見積もり
// 36レコード × 6回ループ = 216回処理
メモリ内処理のみ: < 1ms
DB処理込み: 216ms〜1080ms (1件1-5msの場合)
// 100件INSERT
単発INSERT: 100-500ms
バッチINSERT: 10-50ms
実際に測定する簡単なコード## 使い方
-
メモリ測定:
TestRecord
を実際のデータ構造に置き換え -
時間測定:
simulateDbOperation()
を実際のDB処理に置き換え - 複数回測定: JVMのウォームアップを考慮して平均値を取る
クイック見積もりの目安
// あなたのケースの概算
メモリ: 100レコードで約20-50KB
時間:
- ループ処理: 432ms(2ms/処理 × 216回)
- INSERT: 100-300ms(1-3ms/件 × 100件)
- 合計: 約500-750ms
実際の環境で測定すると、より正確な値が得られます。