インタビューの質問:nginxのは、高い並列性を実現する方法ですか?一般的な最適化は何を意味しますか?

インタビューの質問:

nginxのは、nginxのは、マルチスレッドを使用していないのはなぜ?同時達成する方法ありますか?一般的な最適化がnginxの何を意味?エラー502の考えられる理由は何ですか?

インタビュアー心理分析

最もnginxのは、多かれ少なかれ、すべてを知っているポイントが、実際には非常に少数のはその原則を理解する可能性があるため、主に馴染み、運用、保守担当者かどうかのnginxの候補者の基本的な原則を確認してください。最適化を行うために、その原則を理解し、または静止画のみも、問題を開始する方法はありません、のように移動。

毛皮の人がWebサイトをセットアップするWebサーバーであると一般的に、理解し、主要な運用・保守は、HTTPSを提唱し、リバースプロキシを設定することができ、中間レベルの操作と上流メンテナンスの定義、定期的な裁判官を書き、ベテランは、パフォーマンスの最適化であることを、 ACLを書き込み、それはソースコードを変更するために変更することも可能である(小さなシリーズは、ソースコードを変更する能力を表していません)。

フェイス質問解析

1. nginxのは、高い並列性を実現する方法ですか?

非同期、非ブロッキング、および基礎となるファイルディスクリプタコード最適化の多数を使用します。

サーバープロセスが道のリクエストを担当して使用する場合、数は、同時プロセスの数です。通常の状況下では、進歩の多くが待っているがあるでしょう。

マスター・プロセスのnginxの使用、複数wokerモードプロセス。

  • マスター・プロセスは、収集、配信要求の主な原因です。リクエストが終わるたびに、マスタはワーカープロセスが要求を処理する責任を負っているプルアップされます。
  • マスター・プロセスは、状態wokerを監視する責任があると同時に、高い信頼性を確保
  • wokerプロセスは、一般にCPUコアの数と一致するように設定されています。同時にnginxののwokerプロセスは専用メモリの制限により、処理できる要求の数は、あなたが複数の要求を処理することができます。

nginxの非同期まで使用待機時間の間であること動作モードを非ブロック。あなたは、プロセスの数が少ないのパフォーマンスは、同時実行の問題の多くを解決するように、これらのプロセスは、スタンドを解放するのを待つ必要がある場合。

各リクエストで来る、に対処するためのワーカープロセスが存在します。しかし、サーバなどの可能性障害物に対処するためではない、治療のプロセス全体とどの程度?場所は、上流(バックエンド)に要求を転送し、返すように要求を待っています。したがって、このプロセスの作業員は、彼が要求を送信した後にイベントを登録します、スマートです:「上流が返された場合、私に知らせて、私はその後、ドライ行ってきました。」そこで彼は休むように行ってきました。別の要求が入ってきた場合は、この時点で、彼はその後すぐに、この方法で処理することができます。上流のサーバが返されたら、それは労働者が、この要求は、その後下がるだろう、引き継ぎます、このイベントをトリガします。

2.なぜ、nginxのは、マルチスレッドを使用していませんか?

Apacheは:サーバーのリソースが不足していた総会によって複雑に、複数のプロセスまたはスレッドを作成し、(労働者がperforkサポート並行処理よりも高くなるので、小さなよりもマルチスレッド・プロセス)は、各スレッドやプロセスがCPUとメモリを割り当てます。

Nginxは:非同期シングルスレッド、非ブロック処理要求(ファイルディスクリプタ)(業務プロセス管理者の数はのnginxのマスタープロセスを設定することができます)各要求のCPUとメモリリソースに割り当てられたことはありません、多くのリソースを節約するだけでなく、削減CPUのコンテキストスイッチの大量。だから、nginxのは、高い同時実行をサポートしています。

3. nginxの設定、共通の最適化は何?

(1)調整worker_processes

ベストプラクティスは、ワーカープロセスを実行するために、各CPU用で、生成される労働者nginxの数を指します。

お使いのシステム上のCPUコアは、入力します。

$ grep processor / proc / cpuinfo | wc -l 
复制代码

(2)worker_connectionsを最大化

nginxのWebサーバーは、同時にクライアントの数を果たすことができます。第二缶あたりのクライアントサービスの数を最大化するために、worker_processesと組み合わせると、

クライアント/秒= *ワーカーワーカープロセスの最大接続数

nginxのの完全な可能性を最大限にするために、労働者は1024年の数を実行することができ、最大許容コアを設定するプロセスに接続する必要があります。

(3)Gzip圧縮を有効にします

したがって、ページの読み込み速度を向上させる、伝送帯域幅のHTTPクライアントを減らし、ファイルサイズを圧縮

GZIPの構成例は、http推奨:(部分)に従います

(4)静的ファイルのキャッシュが有効になっています

帯域幅を削減し、パフォーマンスを向上させるために、静的ファイルキャッシュを有効にすると、あなたは、静的なコンピュータファイルにキャッシュされたページを定義するには、次のコマンドを追加することができます。

location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {  
expires 365d;  
} 
复制代码

(5)タイムアウト

キープアライブ接続を調整する必要があり、最適な性能変数の参照を取得し、CPUおよびネットワークオーバーヘッド必要な接続の開閉を減少させます。

(6)無効access_logs

したがって、これによりパフォーマンスのnginxのを減らし、CPUリソースを大量に消費し、各要求のnginxを記録したアクセスログレコード、。

完全に無効にアクセスログ

access_log off; 
复制代码

あなたがアクセスログの記録を持っている必要がある場合は、アクセスログバッファが有効になっています

access_log /var/log/nginx/access.log主缓冲区= 16k 
复制代码

4.502与えられている可能な理由は何ですか?

(1)のFastCGIプロセスが開始されている場合

ワーカー・プロセスの数が十分であるか否か(2)のFastCGI

(3)のFastCGIの実行時間が長すぎます

(4)のFastCGIバッファ十分

nginxのバッファリング制限遠位端としてApache、バッファパラメータを調整することができます

fastcgi_buffer_size 32k;  
fastcgi_buffers 8 32k; 
复制代码

(5)プロキシバッファ十分

あなたがプロキシを使用する場合は、調整

proxy_buffer_size 16k;  
proxy_buffers 4 16k; 
复制代码

(6)PHPスクリプトの実行時間が長すぎます

のPHP-fpm.conf

<value name="request_terminate_timeout">0s</value> 
复制代码

時間に0


おすすめ

転載: blog.csdn.net/weixin_33826268/article/details/91399333