Skip to content

issue100: uWSGI 並列度・タイムアウトと PostgreSQL チューニングを環境変数で調整可能にする#101

Closed
tichi73 wants to merge 4 commits into
developfrom
feature/issue100-tuning-env
Closed

issue100: uWSGI 並列度・タイムアウトと PostgreSQL チューニングを環境変数で調整可能にする#101
tichi73 wants to merge 4 commits into
developfrom
feature/issue100-tuning-env

Conversation

@tichi73

@tichi73 tichi73 commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

概要

高負荷時に Web ワーカ (uWSGI) が長時間占有され、画面や API 全体の応答が枯渇する事象を緩和するため、標準シングル構成の uWSGI ワーカ並列度・タイムアウト、PostgreSQL チューニング、nginx タイムアウトを環境変数で調整可能にします。いずれも既定値は従来挙動を維持するため、未指定なら現行と同じ動作です。

Fixes #100

変更内容

  • ke2/services/kompira.yml: uWSGI のワーカ並列度・タイムアウト系を環境変数化。
    • UWSGI_PROCESSES (既定 5) / UWSGI_THREADS (1) / UWSGI_LISTEN (100) / UWSGI_HARAKIRI (0=無効) / UWSGI_THUNDER_LOCK (false)
    • 同時処理数 = UWSGI_PROCESSES × UWSGI_THREADS
  • ke2/services/nginx.yml, configs/nginx.conf: nginx→uWSGI のタイムアウトを KOMPIRA_NGINX_UWSGI_TIMEOUT (既定 300 秒) で調整可能に。
  • ke2/services/postgres.yml: PostgreSQL の主要チューニング項目を環境変数化。
    • POSTGRES_MAX_CONNECTIONS (100) / POSTGRES_SHARED_BUFFERS (128MB) / POSTGRES_EFFECTIVE_CACHE_SIZE (4GB) / POSTGRES_WORK_MEM (4MB) / POSTGRES_MAINTENANCE_WORK_MEM (64MB)
  • ke2/single/basic/README.md: これらの環境変数の説明を追記。
  • ChangeLog: (uWSGI ワーカ並列度・タイムアウトを compose / nginx 設定で調整可能にする #100) を追記。

注意

  • uWSGI の並列度 (processes × threads) を引き上げる場合は POSTGRES_MAX_CONNECTIONS も連動して引き上げてください。 不足すると "FATAL: sorry, too many clients already" で接続が拒否され、画面/API が 500 になります (目安: processes × threads + 余裕 ≦ max_connections)。
  • UWSGI_* は kompira 本体イメージの起動スクリプトが解釈する前提です。これらを解釈する対応イメージと組み合わせて有効になります (既定値では従来と同一のため、未対応イメージでも動作は変わりません)。
  • 既定値はすべて従来挙動を維持しています。

tichi73 and others added 3 commits June 26, 2026 14:23
標準シングル構成 (ke2/services/postgres.yml) の PostgreSQL チューニング項目を
環境変数で調整可能にした。既定値は postgres 16 の標準値なので未指定なら従来挙動と
同じ。
  POSTGRES_MAX_CONNECTIONS (100) / POSTGRES_SHARED_BUFFERS (128MB) /
  POSTGRES_EFFECTIVE_CACHE_SIZE (4GB) / POSTGRES_WORK_MEM (4MB) /
  POSTGRES_MAINTENANCE_WORK_MEM (64MB)

実装は command を `sh -c 'exec docker-entrypoint.sh postgres -c key="$$POSTGRES_KEY" ...'`
とし、コンテナ実行時にシェルが environment の値を展開する方式にした。これにより
シェル/.env だけでなく docker-compose.override.yml の environment ブロックでの
上書きも反映される (uWSGI_* と同じ感覚で設定できる)。$$ は compose のパース時
置換を避けるエスケープ。docker-entrypoint.sh 経由なので初回起動時の DB 初期化も
従来どおり行われる。

背景: uWSGI のワーカ並列度 (processes×threads) を上げると同時 DB 接続が増え、
max_connections=100 (stock 既定) を超えると "too many clients" で画面/API が
500 になることを実機で確認したため、並列度と連動して調整できるよう env 化する。
README に環境変数表と例を追記。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kompira サービスに uWSGI のワーカ並列度・タイムアウト系の環境変数を追加
(本体イメージの docker-entrypoint.sh が解釈する。既定値は本体既定と同じ):
  UWSGI_PROCESSES (5) / UWSGI_THREADS (1) / UWSGI_LISTEN (100) /
  UWSGI_HARAKIRI (0) / UWSGI_THUNDER_LOCK (false)

nginx の uwsgi_read/send_timeout を KOMPIRA_NGINX_UWSGI_TIMEOUT (既定 300) で
調整可能にした。nginx の envsubst は ${VAR:-default} 非対応のため、既定値は
nginx サービスの environment 側で与える。

同時処理数 (processes×threads) を上げる際は postgres の max_connections も
連動させること (processes×threads + 余裕 <= max_connections)。README に
環境変数表・スケーリングの注意・例を追記。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

高負荷時のワーカ占有による Web/API 応答枯渇を緩和するため、標準シングル構成における uWSGI の並列度/タイムアウト、nginx→uWSGI タイムアウト、PostgreSQL の主要チューニング項目を環境変数で調整可能にする変更です(未指定時は従来挙動維持の方針)。

Changes:

  • PostgreSQL の主要パラメータを POSTGRES_* 環境変数で上書き可能にし、起動コマンドで -c を付与
  • nginx の uwsgi timeout を KOMPIRA_NGINX_UWSGI_TIMEOUT で調整可能に
  • uWSGI の並列度/タイムアウト系を環境変数化し、README/ChangeLog に説明を追加

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
ke2/single/basic/README.md 新規環境変数(Postgres/uWSGI/nginx timeout)と注意点・例を追記
ke2/services/postgres.yml POSTGRES_* による Postgres パラメータ調整と起動コマンドの上書き追加
ke2/services/nginx.yml nginx コンテナへ KOMPIRA_NGINX_UWSGI_TIMEOUT をデフォルト付きで注入
ke2/services/kompira.yml uWSGI の並列度/タイムアウト関連 env を追加
configs/nginx.conf uwsgi_send/read_timeout を envsubst 変数参照に変更
ChangeLog #100 の変更点を追記

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread ke2/services/kompira.yml Outdated
Comment thread configs/nginx.conf Outdated
tichi73 added a commit that referenced this pull request Jul 2, 2026
PR #101 の Copilot レビュー指摘への対応。
- uWSGI 系 env をファイル慣習に合わせ KOMPIRA_UWSGI_* → UWSGI_* → 既定 の
  多段フォールバックに変更。コンテナへ渡すキー名 (UWSGI_*) は本体 entrypoint が
  読む名前なので維持し、本体イメージとの整合性を保つ。
- nginx の uwsgi タイムアウトを read/send 別変数
  (KOMPIRA_NGINX_UWSGI_READ_TIMEOUT / KOMPIRA_NGINX_UWSGI_SEND_TIMEOUT, 各既定 300)
  に分割。README / ChangeLog も追従。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tichi73 tichi73 requested a review from Copilot July 2, 2026 00:24

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 23 out of 23 changed files in this pull request and generated 6 comments.

Comment thread ssl/server-withext.key Outdated
Comment on lines +1 to +3
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCkVw+juujnRJUQ
9mryI48GVj8tWLTuuS+arPLwxZRfu2jd+lCrSGnOxKZ+JOfD4kXK8otx1q/k9Np+
Comment thread ssl/server-withext2.key Outdated
Comment on lines +1 to +3
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDMDzvI8jQZkDtR
0iyBH0GYajuuqOZGcMAAKb1YXXFZ5dJYGAijjYuaB/iN3o80SfX6LGGW0W3rzFqb
Comment thread ssl/server-noext.key Outdated
Comment on lines +1 to +3
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCoWTajt0Fkge5J
4aYUh773C5cOm2/xEjtTzPmP6hJz7wKxPS9skZRULHuVjM3e5+w7Uhe+/R9Ogr6I
Comment thread ssl/server-noext2.key Outdated
Comment on lines +1 to +3
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCZFYyMPkkZEh0m
9x4rB0xPhGJNN1ayPnBek83Y/fOt/dPRWxO3O8s7gDQ69/Gs9VavchCgBMgmC3bL
| `POSTGRES_WORK_MEM` | クエリ毎のソート/ハッシュ作業メモリ(既定 4MB) |
| `POSTGRES_MAINTENANCE_WORK_MEM` | VACUUM・インデックス作成の作業メモリ(既定 64MB) |
| `UWSGI_PROCESSES` | Web サーバ(uWSGI)のワーカプロセス数(既定 5、目安は CPU コア数) |
| `UWSGI_THREADS` | ワーカ1プロセスあたりのスレッド数(既定 1)。同時処理数 = processes×threads。.wait/.recv 多用時に増やす |
Comment thread ke2/services/nginx.yml
Comment on lines +10 to +12
# uwsgi の read/send タイムアウト(秒)。envsubst は ${VAR:-default} 非対応のため既定値はここで与える
- KOMPIRA_NGINX_UWSGI_READ_TIMEOUT=${KOMPIRA_NGINX_UWSGI_READ_TIMEOUT:-300}
- KOMPIRA_NGINX_UWSGI_SEND_TIMEOUT=${KOMPIRA_NGINX_UWSGI_SEND_TIMEOUT:-300}
PR #101 の Copilot レビュー指摘への対応。
- uWSGI 系 env をファイル慣習に合わせ KOMPIRA_UWSGI_* → UWSGI_* → 既定 の
  多段フォールバックに変更。コンテナへ渡すキー名 (UWSGI_*) は本体 entrypoint が
  読む名前なので維持し、本体イメージとの整合性を保つ。
- nginx の uwsgi タイムアウトを read/send 別変数
  (KOMPIRA_NGINX_UWSGI_READ_TIMEOUT / KOMPIRA_NGINX_UWSGI_SEND_TIMEOUT, 各既定 300)
  に分割。README / ChangeLog も追従。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tichi73 tichi73 force-pushed the feature/issue100-tuning-env branch from 2436133 to c48af13 Compare July 2, 2026 00:38
@tichi73

tichi73 commented Jul 2, 2026

Copy link
Copy Markdown
Contributor Author

ブランチに無関係なファイルを誤って含めてしまったため、クリーンなブランチで作り直しました。本 PR は close し、#102 に移行します。

@tichi73 tichi73 closed this Jul 2, 2026
@tichi73 tichi73 deleted the feature/issue100-tuning-env branch July 2, 2026 00:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants