AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

Rails のコネクションプール数

基本的に Rack サーバの Worker 数と同じにするべき。

qiita.com

Puma Web サーバー​を使用している場合は、pool​ 値を同等の ENV['RAILS_MAX_THREADS']​ に設定することをお勧めします。複数のプロセスを使用している場合は、各プロセスに独自のプールが含まれるため、ワーカープロセスが ENV['RAILS_MAX_THREADS']​ を超えない限りはこの設定で十分です。

devcenter.heroku.com

heroku くんもこう言っとる。 基本的に default に当たり障りない値を書いておき (これ今も初期化時に記述されるんでしたっけ)、リモート各種の ENV に個別に記述してあげようね。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default

staging:
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 2 } %>

test:
  <<: *default

production:
  <<: *default
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 6 } %>

RAILS_MAX_THREADS を設定する効果が、コネクションプール以外で発揮されるのかは、わからないです……。

それでもあふれるタイミングがある

インフラを見ている案件、稀にコネクションプール枯渇のお知らせが来る事が出てきて、今月は片手で数えられるくらいだった。 Thread も Worker も利用していないようなので問題ないと思うんだけどなあ、と思っていたけど、 Faraday で外部のサーバと通信しているかつ、この外部サーバがよく死ぬので、その箇所でなんかスタックして新規接続にコネクション配れないのか? という気がしている。

コネクション is 難しい。

AmazonLinux2 に snapd を入れて certbot による証明書自動更新生活を満喫する

前回 CentOS に snap を入れたら、謎のタイムアウトエラーで勝手にデーモンが死ぬ現象に遭遇。あまりに腹が立つので、別の環境で再試行してみることにしたらまた大変だったお話。

ざっと調べてみたら、メタ情報を編集させて認識させる? など一年程度以上前の記事では、そのような記述がありましたが、現在はそこまでしなくても大丈夫なようになっていました。

続きを読む