nginx の高同時実行構成パラメーターの詳細な説明

巴扎黑
リリース: 2017-08-23 15:25:58
オリジナル
2990 人が閲覧しました

1. 一般的に、nginx 設定ファイル内の次の項目は最適化に効果的です:

1. work_processes 8;

nginx プロセス番号 (通常はその倍数) を指定することをお勧めします。例: 2 クアッドコア CPU は 8 としてカウントされます)。

2.worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000000;

上記の例では、8 つのプロセスが 8 つの CPU に割り当てられます。複数記述したり、1つの
プロセスを複数のCPUに割り当てたりすることができます。

3.worker_rlimit_nofile65535;

このコマンドは、nginx プロセスによって開かれるファイル記述子の最大数を指します。理論値は、開いているファイルの最大数 (ulimit -n) を nginx プロセスの数で割ったものです。 nginx の割り当てリクエストは均一ではないため、ulimit -n の値と一致させる方が良いでしょう。

現在、Linux 2.6 カーネルで開いているファイルの数は 65535 であり、それに応じて worker_rlimit_nofile には 65535 を入力する必要があります。


これは、nginx のスケジューリング時のプロセスへのリクエストの割り当てがあまりバランスが取れていないためです。そのため、10240 を入力し、合計同時実行数が 30,000 ~ 40,000 に達すると、プロセス数が 10240 を超える可能性があり、502 エラーが返されます。

Linux システムファイル記述子を表示する方法:

[root@web001 ~]# sysctl -a | grep fs.file

fs.file-max = 789972

fs.file-nr = 510 0 789972

4 . useepoll;

epoll の I/O モデルを使用します

(

追加説明:

Apache と同様に、nginx にもオペレーティング システムごとに異なるイベント モデルがあります

A) 標準イベント モデル

を選択し、Poll は標準イベントに属します現在のシステムにこれより効率的な方法がない場合、nginx は選択またはポーリングを選択します。B) 効率的なイベント モデル。FreeBSD 4.1 以降、OpenBSD 2.9 以降、および MacOS X で使用されます。デュアル MacOS X を使用します。 kqueue を使用するプロセッサはカーネル パニックを引き起こす可能性があります。
Epoll: Linux カーネル バージョン 2.6 以降のシステムで使用されます。



/dev/poll: Solaris 7 11/99+、HP/UX 11.22+(eventport)、IRIX 6.5.15+、および Tru64 UNIX 5.1A+ で使用されます。

Eventport: Solaris 10 で使用されます。カーネルのクラッシュを防ぐために、セキュリティ パッチをインストールする必要があります。

)

5. work_connections65535;

理論上、nginx サーバーごとの最大接続数は、worker_processes*worker_connections です。

6. keepalive_timeout60;

キープアライブ タイムアウト。

7. client_header_buffer_size4k;

クライアント リクエスト ヘッダーのバッファ サイズは、通常、リクエスト ヘッダーのサイズが 1k を超えることはありません。 1k、つまりここではページングサイズに設定されています。

ページング サイズは getconf PAGESIZE コマンドで取得できます。

[root@web001 ~]# getconf PAGESIZE

4096

ただし、client_header_buffer_size が 4k を超える場合もありますが、client_header_buffer_size の値は「システム ページング サイズ」の整数倍に設定する必要があります。

8. Open_file_cachemax=65535 inactive=60s;

これは、開いているファイルのキャッシュを指定します。最大値は、開いているファイルの数と一致するように指定します。リクエスト後にファイルがキャッシュされていない期間。

9. open_file_cache_valid80s;

これは、キャッシュされた有効な情報を確認する頻度を指します。

10. open_file_cache_min_uses1;

open_file_cache コマンドの非アクティブなパラメータの間のファイルの最小使用数。上記の例のように、ファイル記述子は常にキャッシュ内で開かれます。非アクティブな時間に一度ファイルが使用されない場合は削除されます。

2. カーネルパラメータの最適化について:

net.ipv4.tcp_max_tw_buckets = 6000

timewait の数、デフォルトは 180000 です。

net.ipv4.ip_local_port_range = 1024 65000

システムによって開くことが許可されるポートの範囲。

net.ipv4.tcp_tw_recycle = 1

timewait 高速リサイクルを有効にします。

net.ipv4.tcp_tw_reuse = 1

再利用を有効にします。新しい TCP 接続に TIME-WAIT ソケットを再利用できるようにします。

net.ipv4.tcp_syncookies = 1

SYN Cookie を有効にする SYN 待機キューがオーバーフローした場合に、それを処理できるように Cookie を有効にします。

net.core.somaxconn = 262144

Web アプリケーションの listen 関数のバックログは、カーネル パラメーターの net.core.somaxconn をデフォルトで 128 に制限し、nginx によって定義される NGX_LISTEN_BACKLOG のデフォルトは 511 です。この値を調整するには必要があります。

net.core.netdev_max_backlog = 262144

各ネットワーク インターフェイスがカーネルの処理よりも速くパケットを受信した場合にキューに入れることができるパケットの最大数。

net.ipv4.tcp_max_orphans = 262144

ユーザー ファイル ハンドルに関連付けられていない、システム内の TCP ソケットの最大数。この数を超えると、孤立接続は直ちにリセットされ、警告メッセージが出力されます。この制限は、単純な DoS 攻撃を防ぐためだけのものです。この値に依存しすぎたり、この値を人為的に減らしたりすることはできません (メモリを増やす場合)。

net.ipv4.tcp_max_syn_backlog = 262144

クライアント確認情報をまだ受信していない、記録された接続要求の最大数。 128M のメモリを備えたシステムの場合、デフォルト値は 1024 で、メモリが小さいシステムの場合、デフォルト値は 128 です。

net.ipv4.tcp_timestamps = 0

タイムスタンプはシーケンス番号の折り返しを回避できます。 1Gbps リンクでは、以前に使用されたシーケンス番号が必ず発生します。タイムスタンプにより、カーネルはそのような「異常な」パケットを受け入れることができます。ここでオフにする必要があります。

net.ipv4.tcp_synack_retries = 1

ピアへの接続を開くには、カーネルは前の SYN に対する応答として ACK を含む SYN を送信する必要があります。これは、いわゆる 3 ウェイ ハンドシェイクにおける 2 回目のハンドシェイクです。この設定は、カーネルが接続を放棄する前に送信される SYN+ACK パケットの数を決定します。

net.ipv4.tcp_syn_retries = 1

カーネルが接続の確立を断念する前に送信される SYN パケットの数。

net.ipv4.tcp_fin_timeout = 1

ローカルエンドによってソケットが閉じるように要求された場合、このパラメータはソケットが FIN-WAIT-2 状態に留まる時間を決定します。ピアがエラーを起こして接続を閉じなかったり、予期せずクラッシュしたりする可能性があります。デフォルト値は 60 秒です。 2.2 カーネルの通常の値は 180 秒です。 3 この設定を押すことはできますが、マシンの負荷が低い Web サーバーであっても、多数のデッド ソケットによるメモリ オーバーフローの危険性があることに注意してください。 WAIT-2 は、メモリを最大 1.5K しか消費できないため、FIN-WAIT-1 よりも危険性は低くなりますが、寿命は長くなります。

net.ipv4.tcp_keepalive_time = 30

キープアライブが有効な場合、TCP がキープアライブ メッセージを送信する頻度。デフォルトは 2 時間です。

3. 完全なカーネル最適化設定は以下に掲載されています:

vi /etc/sysctl.conf CentOS5.5 では、すべての内容をクリアして次の内容に直接置き換えることができます:

net.ipv4.ip_forward = 0
net.ipv4 .conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_window_scal ing = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net .ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216 core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack _retries = 1
ネット .ipv4.tcp_syn_retries = 1
net.ipv4 .tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keep生きている時間 = 30
net.ipv4.ip_local_port_range = 1024 65000

使用 構成をすぐに有効にするには、次のコマンドを使用できます:

/sbin/sysctl -p


4. 以下は、システム接続数の最適化についてです。

開いているファイルとデフォルト値Linux の最大ユーザー プロセスは 1024 です

#ulimit -n

1024

#ulimit –u

1024

問題の説明: サーバーは同時に 1024 個のファイルしか開くことができず、1024 個のユーザー プロセスを処理します

現在のシステムのすべての制限値を表示するには ulimit -a を使用し、現在開いているファイルの最大数を表示するには ulimit -n を使用します。

新しくインストールされた Linux には、デフォルトでは 1024 しかありません。負荷の高いサーバーとして使用すると、開いているファイルが多すぎるというエラーが発生しやすくなります。したがって、それを大きくする必要があります。

解決策:

ulimit –n 65535 を使用してすぐに変更しますが、再起動すると無効になります。 (ulimit -SHn 65535 は ulimit-n 65535 と同等で、-S はソフトを指し、-H はハードを指します)

3 つの変更方法があります:

1 に ulimit -SHn 65535 の行を追加します。 etc/rc.local

2. /etc/profile に ulimit -SHn 65535 という行を追加します

3. /etc/security/limits.conf の最後に次を追加します:

* Soft nofile 65535

* Hard nofile 65535

*ソフト nproc 65535
* ハード nproc 65535

最初の方法は CentOS では効果がありません、3 番目の方法は効果があります、2 番目の方法は Debian では効果があります

# ulimit -n

65535

# ulimit -u

65535

注: ulimit コマンド自体にはソフト設定とハード設定があり、ハードの場合は -H を追加し、ソフトの場合は -S を追加します。デフォルトの表示はソフト リミットです

ソフト リミットは、現在のシステムで有効な設定。ハード制限値は、一般のユーザーが下げることができます。しかし、それを増やすことはできません。ソフト リミットはハード リミットより高く設定することはできません。 root ユーザーのみがハード制限値を増やすことができます。

5. 以下は簡単な nginx 設定ファイルです:

ユーザー www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 0001000000100000
01000000;
error_log /www/log/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;
イベント
{
epoll を使用;
worker_connections 204800;
}
http
{
mime.types を含む;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cache tables=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 8k;
fastcgi_temp_file_write_size 8k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid 任意の 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale エラー タイムアウト valid_headerhttp_500;
open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nolay オン;
gzip オン;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x -javascript text/cssapplication/xml;
gzip_vary on;
server
{
listen 8080;
server_namebackup.aiju.com;
indexindex.phpindex.htm;
root /www/html/;
location /status
{
stub_status on;
}
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_indexindex.php;
include fcgi.conf;
}
location ~ .*. (gif|jpg|jpeg|png|bmp|swf|js|css)$
{
有効期限 30 日;
}
log_format アクセス '$remote_addr -- $remote_user [$time_local]"$request" '
'$status $ body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /www/log/access.log access;
}
}

六、FastCGIに関する几个命令:

fastcgi_cache_path /usr/local /nginx/fastcgi_cachelevels=1:2keys_zone=TEST:10minactive=5m;

この命令は、FastCGI が指定する経路、構造等のキー領域の保存時間と非アクティブ化の削除時間を指定します。 _timeout 300;

指定

fastcgi_send_timeout 300;

FastCGI への送信要求の超過時間。この値は、2 回のハンドが完了した後の FastCGI への送信要求の超過時間を意味します。

fastcgi_read_timeout 300;

受信收

fastcgi_buffer_size 4k;

FastCGI 応答の最初の部分を取得するためには、複数の大きなバッファー セクションが必要であり、一般に最初の部分が必要です。应答不会

fastcgi_buffers 8 4k;

は、FastCGI を実行するために実際に必要なバッファ領域を指定します。

この命令我也

fastcgi_temp_file_write_size 8k;

fastcgi_temp_path の書き込み時に使用されるデータ ブロックは、fastcgi_buffers の 2 倍です。 fastcgi_cache テスト

FastCGI キャッシュは非常に便利で、CPU 負荷を軽減し、502 ブロックを防ぐ効果があると考えられています。 id 301 1d;

fastcgi_cache_valid any 1m;

は指定されたもの応答コードは保持時間を指定します。上の例では、200、302 応答は 1 時間、301 応答は 10 分、その他は 1 分です。内の最少使用回数、たとえば、5 分間に特定のファイルが 1 回も使用されなかった場合、そのファイルは削除されます。種類の上記はnginxの中のFastCGI関連のパラメータであり、さらに、FastCGI自体にもいくつかの設定を変更する必要があります。php-fpmを使用してFastCGIを管理する場合は、設定ファイル内の以下の値を変更できます:

60

同時に処理および送信されるリクエストの数。つまり、最大 60 個の子回線が処理され、接続が送信されます。



204800

再配置前に実行できる各プロセスの最大リクエスト数。

以上がnginx の高同時実行構成パラメーターの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート