AR ホームベーカリー

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

puma の最適化

ここの続き。

donbulinux.hatenablog.jp

基本的にまず以下を読むといい。 翻訳されているので、だいたい抑えるべきことが書いてある。

techracho.bpsinc.jp

その後に以下を。

re-engines.com

qiita.com

tech-book.precena.co.jp

具体的にどうする

とりあえず以下のようにして、あとはメモリをたくさん積む、くらいの単純な話におちついた。 スレッド数については固定で 6 にしている。

worker

(v)CPU 数と同値〜 1.5 倍、最小は 2 から始める

thread

5 or 6

techracho.bpsinc.jp

残念なことに、アムダールの法則によれば、並列性の占める割合が小さい(50%未満)の場合、手頃なスレッド数をさらに増やすメリットはほとんど(あるいはまったく)ありません。そしてこのことは私の経験とも整合します。Noah GibbsもDiscourseホームページのベンチマークでこれをテストした結果、スレッド数は6に落ち着いたそうです。

計測

実際に jmeter とか gatling, K6 などで負荷かけつつアクセスしてメモリどのくらい消費するか、から worker * thread の合計値で割ったり、メモリ利用率 9 割くらいを目指して APM 眺めつつやるしかない。

APM 一番カンタンなのは agent 入れれる NewRelic かな、と思うんだけど、free だとすーぐに天井行って何も見えなくなるので ElasticAPM (サイドコンテナ) とか自前で用意した方がムリは効く。