Open3

性能関連

DellgreenDellgreen

アプリケーションリソース計画チートシート

基本サイジング指標

負荷レベル 秒間リクエスト (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 (ユーザーアクション完了率など)
DellgreenDellgreen

Javaでの性能見積もりを簡単に行う方法をお教えします。

メモリ消費量の見積もり

基本的なオブジェクトサイズ

// 一般的なオブジェクトのメモリ使用量
String(10文字)56バイト
Integer24バイト  
Long24バイト
配列のオーバーヘッド ≈ 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 (11-5msの場合)

// 100件INSERT
単発INSERT: 100-500ms
バッチINSERT: 10-50ms

実際に測定する簡単なコード## 使い方

  1. メモリ測定: TestRecordを実際のデータ構造に置き換え
  2. 時間測定: simulateDbOperation()を実際のDB処理に置き換え
  3. 複数回測定: JVMのウォームアップを考慮して平均値を取る

クイック見積もりの目安

// あなたのケースの概算
メモリ: 100レコードで約20-50KB
時間: 
- ループ処理: 432ms(2ms/処理 × 216回)
- INSERT: 100-300ms(1-3ms/件 × 100件)
- 合計:500-750ms

実際の環境で測定すると、より正確な値が得られます。