OSS探訪GitHubでログイン

thread poolとcluster workerでRuby/Rack applicationをproduction運用する

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
7,915
主要言語
Ruby
ライセンス
BSD-3-Clause
リポジトリ最終更新
2026/10/03
ページ内ナビ

概要

PumaはRuby/Rack application向けのmulti-threaded Web serverです。single processのthread poolに加え、cluster modeで複数workerをforkでき、preload、SSL、rolling restart等を組み合わせてproduction topologyを構成できます。mainは8.0.2を宣言しています。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

thread poolとcluster workerを組み合わせてRack applicationを並列処理する

各requestをthreadで処理し、cluster modeではmasterから複数worker processをforkして各workerにthread poolを持たせられます。preloadによるcopy-on-write、SSL、rolling restart、UNIX/TCP socket等もproduction運用に組み込めます。

出典:[2]

Puma 8ではIO-bound requestを通常thread poolとは別枠で吸収できる

8.0でenv["puma.mark_as_io_bound"]とmax_io_threadsが追加され、混在workloadでIO待ちのrequestを通常のthread上限を超えて処理する構成を選べます。thread poolのmin/maxをruntime更新するAPIも追加されています。

出典:[4]

向いている用途

Rails・Sinatra等のRack applicationをsingle processからmulti-worker productionまで運用したい場合に向く

developmentの単一processから、worker数・thread数・preload・restart policyを調整するproductionまで同じserverを使いたいRuby backendに適します。Railsのdefault serverでもあります。

出典:[2]

導入前の確認

MRIのGVL、DB connection pool、fork lifecycleとPROXY protocol securityを合わせて設計する

MRIではRuby codeを同時実行できるthreadがGVLで制限されるため、thread数増加がCPU-bound workloadの線形性能向上を意味しません。DB poolはworker×thread構成と整合させ、preload/fork時はsocketやbackground threadの再接続をhookで管理します。mainは8.0.2でRuby 3.0以上を要求し、8.0.2ではPROXY protocol v1のinjection/spoofing対策が入っています。

出典:[2][3][4]

参考にした公式資料

  1. [1]puma/puma — GitHub repository(2026-10-06)
  2. [2]Puma — README(2026-10-06)
  3. [3]Puma — puma.gemspec(2026-10-06)
  4. [4]Puma — History(2026-10-06)
  5. [5]Puma — BSD-3-Clause License(2026-10-06)
編集部からの補足

Ruby/Rack applicationの実行基盤として、thread数とworker数の組み合わせを明示的に設計できるのが強みです。MRIではGVLがあるためCPU-bound処理はthread増加だけで伸びず、DB connection poolやfork後のsocket/background thread再初期化まで含めて容量設計してください。

3ステップで試す

  1. 1

    ソースを取得

    git clone --depth 1 https://github.com/puma/puma.git
  2. 2

    リポジトリへ移動

    cd puma
  3. 3

    公式手順を確認

    READMEのInstallation / Quick Start / Getting Startedにある公式コマンドを続けて実行してください。

    find . -maxdepth 1 -iname 'README*' -exec sed -n '1,220p' {} \; -quit
公式READMEで確認

成長

成長の推移 · 直近30日

7,915 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
22
Open PR
25

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • ruby
  • server
  • multithreading
  • rack
Stars
7,915
Forks
1,502
Watchers
172
Open Issues
62
Contributors
403
所有者種別
Organization
主要言語
Ruby
ライセンス
BSD-3-Clause
リポジトリ最終更新
2026/10/03

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?
Puma 8.0.2とは?Ruby/Rack向けマルチスレッドWebサーバー | OSS探訪