ランタイムアーキテクチャ
リクエスト処理フローと設定ポイント
なぜランタイムの理解が重要か?
エラーが発生した時、どの層で問題が起きているかを特定できないと対応が遅れます。 例: 5GBファイルアップロードエラー → PHPの設定だけでなく、 mod_fcgidのFcgidMaxRequestLenも確認が必要。
リクエスト処理の階層
1
クライアント / ネットワーク
接続タイムアウト、DNS解決、TLS handshake
↓
2
Webサーバー (Nginx/Apache)
LimitRequestBody、client_max_body_size、タイムアウト
↓
3
アプリケーションサーバー / ゲートウェイ
PHP-FPM、Gunicorn、Tomcat、各種タイムアウト・メモリ制限
↓
4
言語ランタイム
PHP: memory_limit、Java: -Xmx、Python: メモリ制限なし
↓
5
アプリケーション / フレームワーク
Laravel、Django、Spring Boot 等のフレームワーク設定
言語別アーキテクチャの違い
| 言語 | 実行モデル | プロセスモデル | 主な設定箇所 |
|---|---|---|---|
| PHP | リクエストごとに起動/終了 | FPM: プロセスプール | php.ini, php-fpm.conf, Apache/Nginx |
| Python | ワーカープロセス常駐 | Gunicorn: prefork/worker | gunicorn.conf.py, Nginx |
| Java | JVM常駐、スレッドプール | マルチスレッド | JVMオプション, server.xml |
| Go | シングルバイナリ常駐 | goroutine (軽量スレッド) | アプリケーション内設定 |
エラー調査の基本フロー
1. どの層でエラーが発生しているか特定
- • Webサーバーのエラーログ (access.log, error.log)
- • アプリケーションサーバーのログ (php-fpm.log, gunicorn.log)
- • アプリケーションログ
2. その層の設定を確認
- • タイムアウト値
- • リクエストサイズ制限
- • メモリ/CPU制限
- • プロセス/スレッド数
3. 設定の依存関係を確認
例: FcgidMaxRequestLen >= post_max_size >= upload_max_filesize
上流の設定が下流より小さいと、下流の設定は意味がない