nginxメモ
nginxのチューニングのためのメモ.
worker_processes
worker_processes auto;を設定しておくとCPUコア数と同じワーカープロセスを起動できる.
worker_rlimit_nofile
通常,プロセスがオープンできるファイルディスクリプタの数には上限がある(Linuxなら1024個).nginxでは1つのワーカープロセスが同時に数千のコネクションを処理することがあるため,足りなくなる場合がある.
足りない場合はnginxのエラーログに"Too many open files"と出力される.
worker_rlimit_nofile [ワーカープロセスがオープン可能なファイルディスクリプタの数];を使うとこの上限を設定できる.
パフォーマンスに影響する設定
keepalive_timeout
nginxに常時接続しているクライアントに対するタイムアウト時間を指定する.
sendfile
sendfile on|off;を有効にするとファイルの読み込みとレスポンス送信にsendfile()システムコールを用いる.ファイルをオープンしているディスクリプタから直接クライアントに送信するので効率よくファイルの送信ができる.
ネットワークマウントされている環境やVirtualBox内では問題になることがあるが,設定しておくと良い
tcp_nopush
sendfileが有効な場合にこのオプションを使用すると最も大きなパケットサイズでレスポンスヘッダとファイルの内容を送信でき,送信するパケット数を最小化できる.
基本的には有効にしておくと良い.
open_file_cache
有効にしておくと,nginxは一度オープンしたファイルの情報を一定期間保存する.
具体的には次の情報をキャッシュする:
ファイルのディスクリプタ,サイズ,更新日時
ディレクトリが存在するか
「ファイルが存在しない」「読み取り権限エラー」といったエラー情報
maxパラメータはキャッシュの最大エントリ数,inactiveパラメータにはキャッシュの最後にアクセスがあった日時からの有効期間を指定する.
キャッシュのエントリ数がいっぱいになると利用頻度の低いキャッシュから削除される.
ex) open_file_cache max=1000 inactive=60s
worker_cpu_affinity
各ワーカープロセスを特定のCPUコアに割り当てることができる.
ex) workder_cpu_affinity 0001 0010 0100 1000
通常,CPUコアへの割当は必要なく,CPUリソースが枯渇しつつある環境においてどうしてもパフォーマンスが必要な場合にのみ指定する.
pcre_jit
正規表現のJITコンパイルを有効にでき,正規表現の処理速度を向上させることができる.
アクセスログ
kataribe
アクセスログを集計してレスポンスの遅いリクエストを確認できる
code: bash
$ cat /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -n
1 /report
113 /mypage
587 /login
1060 /
1173 /images/isucon-bank.png
1173 /stylesheets/bootflat.min.css
1173 /stylesheets/bootstrap.min.css
1173 /stylesheets/isucon-bank.css