ゆーじのろぐスマートフォン用の表示で見るゆーじのろぐこの広告は、90日以上更新していないブログに表示しています。2015-08-03RackサーバーのPumaについて調べてみるはじめにいま開発中のRailsアプリケーションのRackサーバーは最初Unicornを使っていたのですが、諸々の事情でPumaの方を使いたいということになった。リリースもしていないのでやるなら早めに変えちゃおうということでPumaについて調べてみた。PumaとはPumaとはスピードと並列性を追求したRubyのWebサーバーです。RubyでWebサーバーを作るときの標準となっているRackに対応したライブラリになっています。スレッドベースのWebサーバーPumaではリクエストの並列処理を実現するためにスレッドを利用しています。リクエストを処理するためのスレッドを予めスレッドプールに指定した数だけ用意しておきます。リクエストが来るとそのスレッドに処理を任せることでスレッドベースの並列処理を行っています。Rubyの処理系についてPumaではスレッド用いるため、Rubyの処理系はRubinusやJRubyを推奨していますが、MRI(Ruby標準の処理系)でも利用することが可能です。Lockという機能によって利用が制限されています。Lockとは「同時には一つのスレッドしか動かないようにする」というものです。Rubiusのようにスレッドによる並列処理をサポートしている処理系では3つのスレッドを立ち上げて処理を行った場合、同時に処理をおこないます。Lockのよって3つのスレッドを立ち上げて処理を行っても一度に一つのスレッドしか処理をおこないません。IO(ファイルやの書き込みやTwitterAPIを叩くなど)によって待ち時間が発生したタイミングで別スレッドに切り替えて処理を進めます。起動Pumaを起動する場合、以下のコマンドを実行します。pumarailsの場合、以下のコマンドでも実行可能です。-d設定ファイルを指定する場合は-Cオプションのあとに設定ファイルへのパスを指定します。config/puma.rb停止Pumaを停止するにはプロセスに対してQUITシグナルを送ります。tmp/pids/server.pid)`設定ファイルconfig/puma.rbを指定して起動した場合、その設定ファイルから*.pidファイルを探せるのでpumactlというコマンドを使って簡単に停止することもできます。restartに対応しています。restartとはnginxやunicornと同様にサーバーのソケットを開いたままリスタートすることを可能にします。それにより、ユーザーからのリクエストを待たせる事なくサーバーを再起動して新しいバージョンのアプリケーションに切り替える事ができます。restartするにはpumaのプロセスに対してSIGUSR2シグナルを送信します。tmp/pids/server.pid)`設定ファイルを指定した実行した場合、pumactlで再起動をかけることも出来ます。restart設定ファイルpuma起動時のオプションの指定である程度カスタマイズできるがやはり設定ファイルに書いて起動する方が管理しやすいです。pumaの設定ファイルでなにをどう設定できるかまとめておきます。ちなみに設定ファイルのサンプルはpumaのgithubレポジトリのpuma/examples/config.rbから手に入ります。environmentpumaをどの環境で動作させるかを指定します。デフォルトは'development'になっています。railsで使う場合は環境変数RAILS_ENVを直接environmentに指定するのが良いと想います。Railsで使う場合daemonizerackサーバーをデーモンにして起動するかどうかを設定します。truepidfilepidファイルを配置するパスを指定します。Railsの場合、tmp/pids/puma.pidに配置するほうが良いと思います。"#{Dir.pwd}/tmp/pids/puma.pid"state_pathサーバー情報を記載したstateファイルを配置するパスを指定します。stateファイルはpumactlコマンドでサーバーを操作するのに使用します。railsの場合、特別このようなファイルを配置するディレクトリはないので今回はtmp/pids/以下に配置しておきます。modeクラスタモードとは複数のワーカープロセスを起動し、そのプロセスそれぞれでスレッドプールを持ちリクエストを処理する仕組みです。ワーカープロセスの数は以下のように指定します。Workerの数をマシンが持つCore数を超えないように気をつけて下さい。PoolPumaはスレッドによってリクエストを処理します。スレッドをスレッドプールに貯めておく数の下限から上限を指定することが出来ます。16bindサーバーをどのように接続するかをURIで指定できます。Socket経由で接続する場合はunix:///var/run/puma.sockのように指定します。'unix:///var/share/sockets/puma.sock'その他、なにが設定可能か調べるには上記で指定したこと以外にも設定可能な項目はあります。それを調べるには設定ファイルのサンプルか、設定ファイルのDSLが定義されたファイルを読んで探してみると大体何ができるか把握出来ます。2019/09/16(月)〜2019/09/22(日))を出力するコマンドを書いた#てらだよしおまつり、沖縄開催でDocker/k8sのハッカソンを2日間行いました!月別アーカイブはてなブログをはじめよう!arakaji-yuuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。