1分あたり10万ヒットを取得するためのnginx worker_processのチューニング


114

1つのhtmlファイルを提供するサーバーがあります。

現在、サーバーには2つのCPUと2GBのRAMがあります。blitz.ioからは、毎分約12,000接続があり、毎秒250の同時接続で60秒の間に200のタイムアウトが発生しています。

worker_processes  2;

events {
 worker_connections 1024;
}

タイムアウトを増やすと、応答時間が1秒を超えて忍び寄ります。

これからより多くのジュースを絞るために私は他に何ができますか?

回答:


187

設定ファイル:

worker_processes  4;  # 2 * Number of CPUs

events {
    worker_connections  19000;  # It's the key to high performance - have a lot of connections available
}

worker_rlimit_nofile    20000;  # Each connection needs a filehandle (or 2 if you are proxying)


# Total amount of users you can serve = worker_processes * worker_connections

詳細:高トラフィック負荷のためのnginxの最適化


14
1秒あたりのユーザーの総数を計算する式は間違っていると思います。代わりに、1秒あたりに提供されるユーザーの平均数は= worker_processes * worker_connections /(keepalive_timeout * 2)になるはずです。したがって、上記のconfファイルは1秒あたり最大7.6K接続を処理できます。これは@ablemikeが必要とするものをはるかに上回ります。ただし、ulimitに制限があり、変更したくない場合は、worker_rlimit_nofileを使用することをお勧めします。
イーサン、2012年

2
@イーサン、なぜ2で割るべきなのか?1秒ごとに100の新しい接続を取得し、タイムアウトが5の場合、6秒後にstrtingすると、サーバー側でまだ終了していない5 * 100接続が常に存在します。一部のユーザーが自分で接続を中止した場合は、数が少なくなる可能性があります
Bulat

3
キープアライブが0(無効)に設定されている場合、この式は機能しません
Tilo

5
各接続には、images / JS / CSSなどの静的ファイルの場合でも2つのファイルハンドルが必要です。これは、クライアントの接続の場合は1で、静的ファイルを開く場合の2番目です。したがって、worker_rlimit_nofile = 2 * worker_connectionsを変更する方が安全です。
イーサン

4
worker_rlimit_nofileを使用しますが、プロセスごとのオープンファイルカウント値を設定するには、 'ulimit -n'も呼び出す必要があります。これは、initスクリプトで行う方が適切です。
2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.