詳細な最適化nginxの

一般的なnginxの設定ファイルには、次の項目の最適化に関する詳細な効果を持っています:

1. worker_processes 8。

プロセスのnginxの数は、一般的に複数(8の点で、例えば、2つの4コアCPU)であり、フォローCPUの数を指定することが推奨されます。

2. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000。

各プロセスは、8 CPUに割り当てられているプロセスでは、CPU(実施例8)が割り当てられ、もちろん、一つは書くことができ、または
CPUの複数の分配プロセス。

3. worker_rlimit_nofile 65535; 

このコマンドは、nginxのプロセスがファイル記述子の数を開いているとき、理論値は、パケット開かなければならないことを意味する
番号(のulimit -n)はメンバーnginxのプロセスの数で割ったが、nginxの割り当て要求が非常に均一で、そのため最善のulimitではありません一貫性のある値を-n。

今、あなたは、対応する65535を記入すべきであるworker_rlimit_nofile Linux 2.6カーネル番号65535、で開いたファイルを開きます。

プロセスにディスパッチ割り当て要求nginxのは非常にバランスの取れていないので、あなたが10240を埋めるかのように、これは、ある、合計金額が10240以上になり、その後、502エラーを返すことが3から4000000の同時プロセスに達しました。

方法Linuxシステムのファイルディスクリプタをチェックしてください:

[ルート@ WEB001〜]#sysctlを-a | グレップのfs.file

fs.file-MAX = 789972

fs.file-NR = 510 0 789972

4. 利用のepoll。 

I / Oモデルを使用してファイルディスクリプタ

追加情報:

そして同様のapacheの、異なるオペレーティングシステムのためのnginxの、異なるイベントモデル

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

 

/ dev /世論調査:11/99 +のSolaris 7で使用し、HP / UX 11.22+(eventport)、IRIX 6.5.15+とTru64 UNIXの5.1Aの+。

Eventport:カーネルパニックが発生する問題を回避するためのSolaris 10のために使用し、セキュリティパッチをインストールする必要があります。

5. worker_connections 65535; 

プロセスあたりの最大接続数の最大接続数は、理論的には、各サーバーはnginxのworker_processesがworker_connectionsを*です。

6. 60 keepalive_timeout。 

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

7 client_header_buffer_size 4K; 

頭のクライアント要求バッファのサイズは、これは通常、要求は1Kの頭のサイズを超えていない、あなたのページングシステムのサイズに応じて設定することができますが、原因一般的なページングシステムに、ので、ここで設定されたページサイズ1Kよりも大きくなければなりません。

ページサイズを注文することができgetconf PAGESIZE  ました。

[ルート@ WEB001〜]#getconf PAGESIZE

4096

しかし、そこに4Kを超えるclient_header_buffer_sizeが、この値はに設定する必要がありますclient_header_buffer_size 「システムのページサイズ」整数倍。

8 最大= 65535非アクティブ= 60年代open_file_cache。 

指定されたファイルキャッシュはデフォルトで有効になっていない開いこれは、最大では、バッファの数を指定お薦めや非アクティブは多くの時間が要求されていない後にキャッシュファイルを削除するには、参照するファイルの数が同じで、開きます。

9 open_file_cache_valid 80年代; 

これは、有効な情報がないかどうかを確認するどのくらいのキャッシュを指します。

10 open_file_cache_min_uses 1; 

ファイルが時間内に非アクティブに使用されていない場合は、この数を超えた場合、最低非アクティブ時open_file_cache命令パラメータファイル番号が付与さ、ファイルディスクリプタがキャッシュ内に開設された、上記の例では、それがシフトされますまた。

 

第二に、カーネルパラメータの最適化について:

net.ipv4.tcp_max_tw_buckets = 6000

TIMEWAIT数は、デフォルトで18万です。

net.ipv4.ip_local_port_range = 1024 65000

ポートは、システムを開くことができました。

net.ipv4.tcp_tw_recycle = 1

TIMEWAIT、高速リカバリを可能にします。

net.ipv4.tcp_tw_reuse = 1

オープン再利用。TIME-WAITソケットは、新しいTCP接続のために再使用が可能。

net.ipv4.tcp_syncookies = 1

オープンSYNクッキー、SYNキューのオーバーフローが発生し、対処するためにクッキーを有効にします。

net.core.somaxconn = 262144

Webアプリケーションが機能バックログのデフォルトのカーネルは128に私たちにパラメータnet.core.somaxconn制限を与える聞くが、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を送信する必要があり、SYN応答はACKの前部が設けられています。すなわち、第2のハンドシェイク中に、いわゆる3ウェイハンドシェイクです。この設定は、SYN + ACKパケットの送信を接続する前に中止されたコアの数を決定します。

net.ipv4.tcp_syn_retries = 1

コアの数を確立するにはSYNパケット接続を送信する前にあきらめます。

net.ipv4.tcp_fin_timeout = 1

ソケットは、請求項の端部によって閉じられている場合、このパラメータは、状態FIN-WAIT-2年代に留まる時間を決定します。間違ったピアとの接続を閉じることはできません、場合でも、マシンが予期せず。デフォルト値は60秒です。2.2カーネルは、FIN、値は180秒、3でこの設定を押すが、あなたのマシンがWEBサーバの軽負荷である場合でも、死んソケットとメモリのオーバーフローのために多くのリスクもあることを覚えておくことができ、通常は - それは専用メモリの1.5K、彼らの生存期間の延長まで食べることができるので、WAIT-2のFIN-WAIT-1のリスクは、それよりも小さいです。

net.ipv4.tcp_keepalive_time = 30

キープアライブのときのみ使用、キープアライブメッセージのTCPの送信周波数。デフォルトは2時間です。

 

第三に、完全なカーネルの最適化設定の下に掲示さ:

/etc/sysctl.confのVIの  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_sack = 1
net.ipv4.tcp_window_scaling = 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
のnet.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
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1つの
ネット.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem =9450万9.15億9.27億
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
のnet.ipv4.ip_local_port_range = 1024 65000

作成した構成は、すぐにコマンドを使用して有効になります:
/ sbinに/ sysctlを-p

第四に、以下に、システム上の接続数を最適化することです

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

#ulimit -n

1024

#ulimit付き

1024

問題の説明:  説明サーバーが1024のユーザープロセスを扱う、1024でのみオープンできます

-aは、-nは、開いているファイルの現在の最大数を表示することができますのulimitを使用して、システムの現在の制限のすべてを見ることができるのulimitを使用してください。

新しくインストールされたLinuxのデフォルトの大型サーバなどの負荷が、エラーが発生することは容易であるだけで1024:あまりにも多くの開いているファイルを。したがって、それは大きな変化である必要があります。

ソリューション:

即時変更可能なCnの65535 ulimitを使用しますが、再起動後に無効。(のulimitが65535 -n 65535同等のulimitを-shn注、-Sソフトを指し、-H、ハードを意味します)

3つの変更があります。

1.は/etc/rc.localにラインのulimit -shn 65535を追加
の/ etc 2.増加/ 65535行のulimit -shnプロファイル
3. /etc/security/limits.confをを  最後に追加します:

*ソフトNOFILEの65535
*ハードNOFILE 65535
*ソフトNPROC 65535
*ハードNPROC 65535

使用、特に、3つの方法の使用を効果的効果なしに第一のCentOSの方法を使用して、Debianに第二のタイプの使用が有効

#ulimitの-n

65535

#ulimitの-u

65535

注意:ulimitのコマンド自体はハード設定やソフトのポイントを持って、プラス-Hは難しいです、-Sが柔らかいデフォルトの表示で追加することはソフト制限です

ソフト限度は、実際に、現在のシステムの設定値を意味します。ハードリミット値は、通常のユーザーを低減することができます。しかし、それは増加することができません。ソフト制限はハード制限よりも高く設定することはできません。rootユーザーのみがハードリミットを増やすことができます。

 

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

ユーザーのWWW WWW。
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000
01000000。
/www/log/nginx_error.logクリティカルをerror_logに。
pidは/usr/local/nginx/nginx.pid。
worker_rlimit_nofile 204800;
イベント
{
使用するファイルディスクリプタ。
worker_connections 204800;
}
HTTP
{
のmime.typesを含みます。
default_type application / octet-streamと;
文字セットUTF-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2K;
4 4K large_client_header_buffers。
client_max_body_sizeの8メートル。
sendfileの上;
上TCP_NOPUSH;
keepalive_timeout 60;
fastcgi_cache_pathは/ usr / local / nginxの/ fastcgi_cacheレベル= 1:2
keys_zone = TEST:10メートル
、非アクティブ= 5メートル。
300 fastcgi_connect_timeout;
300 fastcgi_send_timeout;
300 fastcgi_read_timeout;
4K fastcgi_buffer_size;
fastcgi_buffers 8 4K。
8K fastcgi_busy_buffers_size;
8K fastcgi_temp_file_write_size;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1H。
fastcgi_cache_valid 301 1D。
任意の1メートルをfastcgi_cache_valid。
fastcgi_cache_min_uses 1;
HTTP_500 invalid_header fastcgi_cache_use_staleエラーのタイムアウト。
最大= 204800非アクティブ= 20sとopen_file_cache。
open_file_cache_min_uses 1;
open_file_cache_valid 30代;
上のTCP_NODELAY;
gzipの上;
gzip_min_length 1K;
gzip_buffers 4 16K。
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text / plainのアプリケーション/ X-javascriptのテキスト/ cssのアプリケーション/ xmlの;
;上のgzip_vary
サーバー
{
8080を聞きます。
SERVER_NAME backup.aiju.com;
インデックスのindex.php index.htmを。
ルート/ WWW / HTML /。
位置/ステータス
{
にstub_status。
}
場所〜* /(PHP | PHP5)$。。?
{
127.0.0.1:9000 fastcgi_pass。
fastcgi_indexのindex.phpを。
fcgi.confが含まれます。
}
。。場所〜* /(GIF | JPG | JPEG | PNG | BMP | swfファイル| JS | CSS)$は
{
30dは有効期限が切れます。
}
LOG_FORMATアクセス'$ REMOTE_ADDR - $ REMOTE_USER [$ time_local] 『$依頼』'
'$ステータスの$ body_bytes_sent 『$ HTTP_REFERER』'
「」$ HTTP_USER_AGENT」$ HTTP_X_FORWARDED_FOR ';
access_logの/www/log/access.logアクセス。
}
}

第六に、FastCGIの上の少数の命令:

fastcgi_cache_pathは/ usr / local / nginxの/ fastcgi_cacheレベル= 1:2 keys_zone = TEST:10minactive = 5メートル。

このディレクティブは、主要地域の保存時間と削除の非アクティブ時間をFastCGIのキャッシュディレクトリ構造のレベルのパスを指定します。

300 fastcgi_connect_timeout;

FastCGIのの指定されたタイムアウトの後端に接続されています。

300 fastcgi_send_timeout;

送信要求FastCGIのタイムアウトは、タイムアウト値は、ハンドシェークがFastCGIの送信要求が完了した後、双方向です。

300 fastcgi_read_timeout;

FastCGIのタイムアウト応答が受信され、この値はタイムアウトはFastCGIの双方向ハンドシェイク応答を受信した後に完了しているされています。

4K fastcgi_buffer_size;

ページサイズはので、ここで、4Kであるため、応答の最初の部分を読むことは、最初の応答部分1Kよりも一般的にこれ以上、FastCGIの多くの必要なバッファを指定しない4Kに設定されています。

fastcgi_buffers 8 4K。

どのくらい、どのくらいのFastCGI応答をバッファリングするために使用されるローカルバッファを指定します。

8K fastcgi_busy_buffers_size;

このコマンドは、私はデフォルトの値はその倍のfastcgi_buffersのあることを知っている、と何をするか分かりません。

8K fastcgi_temp_file_write_size;

書き込みfastcgi_temp_pathは、デフォルト値はどのくらいのデータのブロックである場合には二回fastcgi_buffers。

fastcgi_cache TEST

オープンのFastCGIキャッシュとその開発のための名前。個人的な感情は非常に便利なキャッシュを開いて、効果的にCPUの負荷を軽減し、502エラーを防止することができます。

fastcgi_cache_valid 200 302 1H。
fastcgi_cache_valid 301 1D。
任意の1メートルをfastcgi_cache_valid。

200302一時間キャッシュ応答、応答バッファ301一日、もう1分上記実施形態では、指定されたバッファ時間の指定されたコードを返信。

fastcgi_cache_min_uses 1;

ファイルは5分以内に一度使用されていない場合、上記の例では、周波数の時間パラメータのfastcgi_cache_path非アクティブ指令値に使用される最小のキャッシュ、ファイルが削除されることになります。

HTTP_500 invalid_header fastcgi_cache_use_staleエラーのタイムアウト。

私は、このパラメータの役割を知らない、推測では、nginxのは、キャッシュのタイプは無用である知っているようにする必要があります。上記のほかに、のFastCGI nginxの関連するパラメータであり、FastCGIの自体はいくつかの設定は、あなたが、あなたが設定ファイルに次の値を変更することができたFastCGIを管理するためのPHP-FPMを使用する場合、最適化する必要があります。

<値の名前=」max_children」> 60 </ value>の

同時要求は、処理され、すなわち、それは同時接続を処理するために、60のサブスレッドに開きます。

<値の名前=」rlimit_files」> 102400 </ value>の

開いているファイルの最大数。

<値の名前=」max_requests」> 204800 </ value>の

実行可能な要求の最大数をリセットする前に、各プロセス。

:への転載https://www.cnblogs.com/yueminghai/p/8657861.html

もう一つの価値の最適化とストレステストの記事:https://blog.csdn.net/qq_30038111/article/details/79794377

おすすめ

転載: www.cnblogs.com/jpinsz/p/10959046.html