doudonn WEB制作やサーバーの話とかいろいろ

Nginxのmulti_acceptの意味とon・offでのApache Benchの結果(同時アクセス比較)

  doudonn 更新日:
Nginxのmulti_acceptの意味とon・offでのApache Benchの結果(同時アクセス比較)

Nginxのmulti_acceptはonが絶対という風潮

自分も信じてonにしていましたが、怪しくなったので調査。
on・offでabベンチをした結果などを共有します。

1、multi_acceptの公式の説明

Syntax:	multi_accept on | off;
Default: multi_accept off;
Context: events

multi_acceptが無効になっている場合、ワーカープロセスは一度に1つの新しい接続を受け入れます。 それ以外の場合、ワーカープロセスは一度にすべての新しい接続を受け入れます。

※Google翻訳

Nginx公式の説明は本当わかりにくい。

デフォルトではoffなので、絶対にonが良いというものではないのがわかる。
何かしら理由がある場合にonにするものなので、
ここを理解せず使うのは怖いものがあります。

実際の挙動を見るとわかりやすい。

2、multi_acceptをonにするとこうなる

Nginxのmulti_acceptをonにするとこうなる

一つのワーカープロセスを集中して使うようになる。

公式の説明通りです。
普通は全てのワーカープロセスで順番に処理するのですが、
multi_acceptをonにすると一つのワーカープロセスで処理をする。
ただ、限界を迎えた場合?は別のワーカープロセスも使うことを確認。

これによりいろいろとリソースを無駄にすること無く処理できる。
実際、Nginxのメモリ総合使用量も少なくなります。
低スペックのマシンで有効にしたい。

そう、multi_acceptは速度アップではなく「サーバー負荷軽減」のためのもの。
同時アクセスの処理が増えるというものではない。

3、multi_acceptのon・offによる同時アクセス処理数

Apache Benchで比較してみます。

・ab -n 100 -c 100 https://doudonn.com/index.html
・各6回試行した平均値

multi_accept on off
Requests per second 344 355

multi_acceptをOFFにした方がわずかに速い。

測定は6回ですが、それ以前に試験的に10回以上測定しており、
それでもoffにした方が速かったので、速くなることは間違いないと結論。

ワーカープロセスもちゃんと全部使っています。

Nginxのmulti_acceptをoFFにするとこうなる

この方が安心する。

まとめ

スペックに余裕がある場合はmulti_acceptはOFFが良いだろう。

デフォルトでoffになっている理由がわかります。
ただ、onにしてもそれほど悪くならないので、onでも大きな問題は無いと思う。
メモリやコネクションがボトルネックになっている場合もonで良いと思う。
このあたりのバランスが難しい。

この結果から、自分はロードバランサ・バックエンド両方multi_acceptをoffにしました。
特に負荷の大きいロードバランサでoffにすると大きな効果がありました。
重たい処理をするほどoffにする方が良いのかもしれない。

そんな感じなので、
「どのサイトもmulti_acceptはonって書いてある!」と思考停止でonにせず、
自分のサイトではどうだろうか?と測定してみてほしい。

Nginxの関連記事
サーバーの関連記事

記事一覧はこちら:サーバー

管理人について
doudonn
名前:doudonn(どうどん)
ひたすらWEB制作な人。
一応社長です。音ゲー好き

プロフィール
お知らせ

2022年11月30日に全記事削除しました。
無駄にページ表示速度にこだわってます。

役立ちサイト
wiki

プライバシーポリシー・広告について


© 2022-2024 doudonn All Rights Reserved.