nginx の worker_processes を auto にしたときの挙動
worker_processes
ワーカーのプロセス数。ドキュメントを意訳するとこんな感じ。
worker_processes の最適値な、いろんな要素が複雑に絡み合っていて複雑なんや。CPU のコア数とか、負荷のかかり方とか、とにかく複雑なんや。困ったら CPU のコア数とかにしとけばええんちゃうか?あとな、auto にしとくとよしなに設定してやるやで。
よしなに…?
- よしなにの中身を知りたかったのでググる
- "よしなに設定する" としか書いてない
ソースをよんだ(怒)
https://github.com/nginx/nginx
worker_processes で grep
それっぽいのでてきた。
src/core/nginx.c
if (ngx_strcmp(value[1].data, "auto") == 0) { ccf->worker_processes = ngx_ncpu; return NGX_CONF_OK; }
auto だったら ngx_ncpu
に設定されるらしい。
ngx_ncpu
で grep
それっぽいのでてきた。
src/os/unix/ngx_posix_init.h
#if (NGX_HAVE_SC_NPROCESSORS_ONLN) if (ngx_ncpu == 0) { ngx_ncpu = sysconf(_SC_NPROCESSORS_ONLN); } #endif
sysconf(_SC_NPROCESSORS_ONLN)
で利用可能なプロセッサ数をとれるっぽい。$ man 3 sysconf
参照。
あと気になるのが NGX_HAVE_SC_NPROCESSORS_ONLN
。
NGX_HAVE_SC_NPROCESSORS_ONLN
で grep
auto/unix
ngx_feature="sysconf(_SC_NPROCESSORS_ONLN)" ngx_feature_name="NGX_HAVE_SC_NPROCESSORS_ONLN" ngx_feature_run=no ngx_feature_incs= ngx_feature_path= ngx_feature_libs= ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)" . auto/feature
は?(威圧)
突然のシェルスクリプト。とりあえず auto/feature
を見てみる。
auto/feature
cat << END >> $NGX_AUTO_CONFIG_H #ifndef $ngx_feature_name #define $ngx_feature_name `$NGX_AUTOTEST` #endif END
だいぶ省略したけど、ビルドするときに動的にヘッダファイルを作ってるみたい。
まとめ
結局コア数だった。