11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pumaについて深掘りしてみた

Last updated at Posted at 2023-09-18

Pumaとは

Railsを動かすためのアプリケーションサーバーのことで、Webサーバーの役割も兼ねることができブラウザからのリクエストを元にレスポンスも返す。Rails6はデフォルトでPumaが採用されている。

その他のRails用のアプリケーションサーバー
  • Unicorn
  • Mongrel
  • Thin
  • Rainbows
    など。それぞれに異なる長所があり、異なる設計思想を持っている。

Pumaの仕組み

マルチスレッド

1プロセスの中で複数の処理を同時に扱うマルチスレッドで動作する。マルチスレッドによって大量のアクセスを効率的に処理することができる。

Ruby/Rackアプリケーション

Puma is a simple, fast, multi-threaded, and highly parallel HTTP 1.1 server for Ruby/Rack applications.

Puma は、シンプル、高速、マルチスレッドで多数の並列処理を実現できる Ruby/Rack アプリケーションの HTTP 1.1 サーバーである。
Rackは、Rubyにおけるサーバーとアプリケーション・フレームワーク間のインターフェースの役割を果たすライブラリのこと。

rails serverコマンドは、Rack::Serverのオブジェクトを作成し、Webサーバーを起動している。

  1. HTTPリクエストをWebサーバーであるNginxやApacheで受けとる
  2. NginxはそのリクエストをPumaにSocket通信で渡す
  3. PumaはそのリクエストをRack::Serverに渡す
  4. 最終的にRailsのRouterに渡される

Pumaの特徴

Webサーバーとの連携

PumaはWebサーバーとしての機能を兼ねることもできますが、通常の本番運用ではPumaはアプリケーションサーバーとしての機能に特化させて、NginxやApache等のWebサーバーと連携させた構成にすることが多い。

Unicornとの比較

Unicornはマルチプロセスで動く。プロセスごとに通信処理を行うので、重たい通信があった場合そこでブロックされて全体が重くなる。これを捌けるようにするには、UnicornのWorker数を増やす必要があるが、CPUのコア数による処理制限があるため無闇に増やせない。

Unicornで動かす場合は、マルチプロセスなのでスレッドセーフは保証されている。

Puma Unicorn
概要 スレッドベース プロセスベース
メリット スレッドが2つあったら、2つのリクエストを同時に処理できる。マルチプロセス+マルチスレッドで動かすので、workerプロセスが2つ✖スレッドが2つある場合、4つのリクエストを同時に処理できる。 workerプロセスが2つある場合、2つのリクエストを同時に処理できる。スレッドセーフなコードを意識しなくて良い。

Pumaの設定

PumaはRailsの場合、config/puma.rbで詳細な設定をすることができる。

threads_count

Pumaサーバーがワーカープロセスごとに持つことができるスレッドの数を指定する。これによって1つのワーカープロセスが同時に処理するリクエストの数を制御できる。

config/puma.rb
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count
port

Pumaサーバーが待機するポート番号を指定する。外部からのリクエストを受け取るためには、特定のポート番号で待機する必要があります。

config/puma.rb
port ENV.fetch("PORT") { 3000 } # Pumaに3000番ポートで待機させる例 
pidfile

PumaプロセスのPIDを保存するファイルのパスを指定する。PIDファイルはデーモンとして実行されているプロセスの情報を追跡するために使用される。

config/puma.rb
pidfile 'tmp/pids/puma.pid'

参考ページ一覧
https://nekorails.hatenablog.com/entry/2018/10/12/101011
https://github.com/puma/puma
https://serip39.hatenablog.com/entry/2020/12/23/235700
https://qiita.com/jnchito/items/3884f9a2ccc057f8f3a3
https://qiita.com/redrabbit1104/items/9292b5891dc46eb64f3a

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?