面接の質問と回答やソリューションへのnginxのnginxのパフォーマンスの最適化ソフトウェアレベル

面接の質問と回答やソリューションへのnginxのnginxのパフォーマンスの最適化ソフトウェアレベル

nginxのに多くの問題を答える方法を知りませんでした3つの顔、深く勉強していないが、最終的には、学ぶためにいくつかの時間がかかったとき去年の愛のカード車のインタビューPHP、丸い顔と2は、良いですプログラマーのメダルを獲得するために10月24日号、高いパフォーマンスの問題のために最適化されたnginxのソリューションは、この励まさ半最適化されたノート、1000 +への参照を、発行され、私は慎重にソートアウト時nginxのパフォーマンスの最適化問題についてまで時間がかかり、我々ソフトウェアからいえば。

ソフトウェアレベルからハードウェアの効率を高めます

  • 増加したCPU使用率
  • 増加メモリ使用率
  • 増加のディスクI / Oの使用率
  • ネットワーク帯域幅の増加の利用

増加したCPU使用率

図1に示すように、CPU使用率nginxのの有効長さを増加させます

  • すべてのCPUリソースを使用することができます
  • マスタ・ワーカマルチプロセスアーキテクチャ
  • ワーカー・プロセスの数は、CPUコアの数に等しい以上でなければなりません
  • nginxのプロセスの間に有用廃棄物のCPUリソースをしません
  • ワーカープロセスは、一度にビジーでない、CPUを放棄するためのイニシアチブを取る必要があります
  • ワーカープロセス間の競争は、資源の消費につながるべきではありません
  • ワーカー・プロセスの数は、CPUコアの数に等しくなければなりません
  • ワーカープロセスは、CPUに_いくつかのショップ1リードイニシアチブを呼び出すべきではありません
  • 同様のサードパーティのモジュールを拒否
  • リソース他のプロセスのために戦っていません
  • 長いCPUの優先順位を上げます
  • 非リソース集約型のオペレーティングシステムを減らすためにnginxのプロセス

ワーカープロセス技術と原則の数を設定します:CPUコアの数よりも大きくなければなりませんワーカープロセスの数に等しい、より大きな、より良いワーカープロセスの数を設定すると言うことではない、彼はそう、複数のCPUコアとCPUコアの数でなければなりません右の方法を設定しますCUP走行、(平行マクロ、ミクロシリアル、プロセスの実行時間は、区間のタイムスライスに分割されている)ので、CPUリソースの最大使用すること。

Syntax:	worker processes number auto;
Default:	worker_processes 1;
Context:	main

しかし、代わりに大きな値を設定するほど、また、CPUのタイムスライス動作の実行によって影響を受け、OSのスケジューリングシステムを順次ビジネス、またはハードディスクの処理速度と一致しないため、各プロセスは、長さ指定された時間スライスまで行われる選択しますCPUにAPIイニシアチブによって引き起こされるタイムスライス閉塞内にする工程を削減する努力を切り替えます。

チェンの切り替え、それは別のプロセスまたはスレッド1つのプロセスまたはスレッドからCPUスイッチを指します。コンテキストスイッチの数を表示するコマンドがありますVmstatDstatPidstat -w

設定された優先ダイナミックな優先順位は、静的優先度のワーカープロセスを設定、CPUのタイムスライスのサイズを決定します。

Syntax:	worker priority number;
Default:	worker_priority 0;
Context:	main

NUMAアーキテクチャに依存するCPU、私たちはしばしば、特定のCPUにCPUのキャッシュのヒット率、労働者のバインドを高める上でキャッシュ、L2キャッシュ、3レベルのキャッシュ、nginxの性能向上の嘘と言います。

worker_processes     4;
worker_cpu_affinity 01 10 01 10;

ウィンドウをスライディング:nginxのは、ネットワークの最適化を介して送信しました

アクティブウィンドウ関数:ネットワークの速度制限に接続する、L溶液パケットシーケンス舌と信頼性の高い伝送の問題、nginxのは、速度指令をlimitrateと実装されているようにそれに依存して、オペレーティング・システム・カーネルによって送信および受信ウィンドウに接続された各端部に実装されていますウィンドウ。

nginxのタイムアウト指示やスライディングウィンドウネットワーク伝送リソースを解放し、接続を終了します。

読み込みタイムアウトの間

Default:	client_body_timeout 60s;
Context:	http, server, location

2つの書き込み操作間のタイムアウト

Default:	send_timeout 60s;
Context:	http, server, location

上記の両方の両方:

Default:	proxy_timeout 10m;
Context:	http, server, location

イニシアチブは、できるだけすぐにCPUを解放し、接続を確立するために、アプリケーション層のタイムアウト。

proxy_connect_timeout 60s; 
Context:http, server, location

NORリンクの数でその契約は、より良いnginxの設定には、サーバのSYN攻撃を引き起こす可能性があります。SYNキューがいっぱいになると、新しいSYNは、クライアントにクッキーSYN + ACKシーケンス番号背中を計算し、キューに登録されていない、クライアントのトランスミッタ通常のテキストは、サーバー接続がクッキーを運ぶメッセージに応じて、再び復元されます。

net.ipv4.tcp_syncookies = 1

ワーカープロセスは、nginxの上流と下流との間の接続を含む接続の最大数を設定します。

Syntax: worker_connections_number;
Default: worker_connections 512;
Context: events

nginxのは増加し、ネットワーク帯域幅の使用率で最適化

処理が完了しnginxのコール近いが、クライアントによるコンテンツて送信を受け、まだ受信バッファ場合はHTTPレスポンスを無視して、サーバーが原因レシートRSTにクライアントを引き起こして、接続を閉じ、クライアントにRSTパケットを送信し、接続を閉じているとき。

Default:	lingering_close on;
Context:	http, server, location	

有効にすると、ユーザーはすぐに接続を達した後、読み出されたコンテンツを要求した時の最長の長さが閉じられています。

Default:	lingering_time 30s;
Context:	http, server, location

有効にすると、ユーザーはすぐに接続を達した後、読み出されたコンテンツを要求した時の最長の長さが閉じられています。

Default:	lingering_timeout 5s;
Context:	http, server, location

RSTの代わりに、通常の4ウェイハンドシェイクのすぐ近くに接続するRSTポート、メモリおよびその他のリソースを送信することにより、閉じられたリリースを他の読み取り、書き込みtimeoutコマンドは、接続による影響を取るために、接続を閉じます。

Default:	reset_timedout_connection off;
Context:	http, server, location

TLS / SSLハンドシェイクのパフォーマンスの最適化、

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
Context: http, server

off 不使用Session缓存,且Nginx在协议中明确告诉客户端Session缓存不被使用
none 不使用Session缓存
builtin 使用Openss啲Session缓存,由于在内存中使用,所以仅当同一客户端的两次连接都命中到 同一 worker进程时,Session缓存才会生效
shared:name:size 定义共享内存,为所有worker进程提供Session缓存服务。IMB大约可用于4000个Session

HTTP長い接続は、サーバリソースの消費を減らすために、同時接続数を減らすことにより、ハンドシェイクの数を減らし、TCPの輻輳制御の影響を低減します

Default: keepalive_requests 100;
Context: http, server, location
发布了98 篇原创文章 · 获赞 185 · 访问量 9万+

おすすめ

転載: blog.csdn.net/xuezhiwu001/article/details/103100678
おすすめ