Nginx の高同時実行最適化の実践

Nginx の高同時実行最適化の実践

1. チューニングの必要性

​ 私は、どのように書けばいいのか本当に分からないので、共有するために最適化されたコンテンツを書くことにいつも消極的でした。うまく書かないと、いろいろと批判されてしまうからです。今日ようやく書きました。たくさんの人が私にプライベートメッセージを送ったり、グループで質問したり、私の経験を共有するように頼んできたので、屈服しました。

チューニングについて説明する前に、まずチューニングが必要な理由と、ビジネス運用とチューニングの関係を理解する必要があります。

  • 事業運営:オンライン事業は正常に運営され、会社の事業を遂行しています。
  • 監視業務: 監視業務を通じてオンライン ビジネスを監視し、問題をタイムリーに検出します。
  • ビジネスの最適化: 監視と分析を通じて、ビジネス上の問題やボトルネックを発見し、ビジネスやソフトウェアをタイムリーに調整および最適化できます。
  • 最適化をテストする: 最適化が完了したら、既存の最適化をテストして、現在の最適化モードでビジネスが安定して効率的であり、現在の問題を解決できることを確認する必要があります。

これは業務運営プロセスであり、ビジネスの安定性、効率性、高可用性を確保するための当社の運用・保守方法でもあります。

2. チューニングの次元と意見の相違

チューニングに関する記事を書くのが最も難しいのは、異なるビジネスがさまざまなマシンで実行され、さまざまなリソースを消費するため、チューニング オプションしか伝えられず、特定のしきい値を伝えることができないためです。また、シナリオが異なるため、対応するチューニング項目としきい値は常に変化します。これは、あなたとルームメイトが両方とも風邪をひいているのに、病院で処方される薬がまったく異なるのと同じです。そのため、多くの人がチューニング記事を読んで、特定のチューニング項目やしきい値を見ると、2 つの言葉が頭に浮かぶのです。「恥ずかしいですが、写真を追加してください!」皆様にご理解いただければ幸いです。

3. Nginx のチューニング

  • Nginx同時接続数
  • nginx プロセスの最適化
  • nginx 圧縮
  • nginx ローカルキャッシュ

1. Nginxの同時接続数設定

ワーカープロセス 1;

これは、nginx が複数のワーカー プロセスを開始するように構成するために使用され、デフォルトは 1 です。また、nginx は、worker_cpu_affinity と呼ばれる構成項目もサポートしています。つまり、nginx は CPU を各ワーカー プロセスにバインドできます。以下のように設定しました:

 イベント {
    ワーカー接続 1024;
}

2. nginxはプロセスを固定コアにバインドします

ワーカーCPUアフィニティ0010 0100 1000;

ワーカープロセス 3;
ワーカーCPUアフィニティ0010 0100 1000;
#ここで 0010 0100 1000 はマスクであり、それぞれ 2 番目、3 番目、4 番目の CPU コアを表します。

nginx を再起動すると、3 つのワーカー プロセスがそれぞれ独自の CPU を使用できるようになります。

ps -eo psr,pid,arg 表示

Nginx の同時実行数 = ワーカープロセス * ワーカー接続

3. nginxの圧縮機能

圧縮は、主に次の 2 つの点で WEB サーバーにとって非常に重要です。

1) ユーザーエクスペリエンスの向上: 送信データが小さくなり、ユーザーの待ち時間が短くなります。

2) 会社の帯域幅コストを節約: 圧縮後、送信されるデータが小さくなり、占有される帯域幅が少なくなります。

ユーザーに優れた体験を提供できるため、企業にとってもコスト削減につながります。なぜこんないいことをしないのでしょうか? これは仕事に欠かせないアイテムです。

ただし、構成の圧縮にはさらに注意が必要です。

1) 画像、音声、動画を圧縮しない

2) 1K 未満のファイルは圧縮しないでください。圧縮するとファイルサイズが大きくなります。

3) 圧縮レベルが高くなるほどCPUの消費量が多くなります

圧縮が有効になっていません

圧縮をオンにする

コードは次のとおりです。

gzip on; (gzip 圧縮を有効にする)

gzip_http_version 1.1; デフォルト値は HTTP/1.1 です。つまり、gzip 圧縮は HTTP/1.1 プロトコル リクエストでのみ実行されます。gzip_disable "MSIE [1-6]."; この設定は、IE1-6 バージョンで gzip 圧縮を無効にするものです。gzip_proxied any; (nginx をフロントエンド プロキシとして使用する場合はこのオプションを有効にします。つまり、バックエンド サーバーのヘッダーによって返される情報に関係なく、圧縮が無条件に有効になります)

gzip_min_length 1024; (最小圧縮ページ。ページが小さすぎると、どんどん大きくなる可能性があります。ここでは、1K を超えるページに対してのみ圧縮が有効になっています)

gzip_buffers 4 8k; (gzip圧縮結果データストリームを保存するためにシステムが複数のキャッシュユニットを取得し、元のデータサイズに応じて8K単位で4倍のメモリスペースを適用するように設定します)

gzip_comp_level 3; (圧縮レベル。1 は圧縮率が最も低く、処理速度が最も速く、9 は圧縮率が最も高いが、処理速度が最も遅く、CPU の消費量も最も多くなります。通常は 3 に設定すれば十分です)

gzip_types text/plain text/css application/x-javascript application/javascript application/xml; (圧縮が可能なページまたはドキュメントの種類)

圧縮検証を有効にする

4. nginxローカルキャッシュ機能

ブラウザ キャッシュは、ブラウジングの速度を速め、ネットワーク リソースを節約するためのものです。ブラウザは、最近要求されたドキュメントをユーザーのディスクに保存します。

クライアント キャッシュと圧縮には本質的な違いがあります。ユーザーが初めてデータをダウンロードすると、そのデータはクライアントのローカル ハードディスクに保存されます。次回使用するときは、ローカル リソースの有効期限が切れていない限り、ローカル ハードディスクから直接読み取られます。データを取得するために WEB サーバーを探す必要がないため、これが最も高速です。また、ユーザーエクスペリエンスを最適化し、企業の帯域幅コストを節約します。

以下の点に注意してください。

​ キャッシュは通常、画像、Web サイトのフレームワーク、オーディオ、ビデオなど、頻繁に変更されないデータをキャッシュします。最適なアプリケーションは、Baidu ホームページです。インターネットに接続していないときでも、Baidu ホームページを開けることがあることに気づいたことがありますか? これは、ローカル キャッシュを参照しているためです。

Nginx ローカル キャッシュの設定手順

nginxはexpires命令を通じてブラウザのヘッダーを設定することができる

構文: expires [time|epoch|max|off]

デフォルト値: 有効期限オフ

スコープ: http、サーバー、場所

このディレクティブは、HTTP 応答の「Expires」および「Cache-Control」ヘッダー (ページ キャッシュを制御する) を制御するために使用できます。
時間値には正または負の数値を使用できます。 「Expires」ヘッダーの値は、設定した時間値に現在のシステム時刻を加算することによって取得されます。

epoch は、「Expires」の値を 1970 年 1 月 1 日 00:00:01 GMT に指定します。
max は、「Expires」の値を 2037 年 12 月 31 日 23:59:59 GMT に指定し、「Cache-Control」の値を 10 年に指定します。
-1 は、「Expires」の値をサーバーの現在の時刻 - 1 秒に指定します。つまり、常に期限が切れることを意味します。

キャッシュの例

画像キャッシュ 30 日間の場所 ~.*\.(jpg|png|jpeg)$
  {
 有効期限は30日です。
 }

1 時間の js css キャッシュの場所 ~.*\.(js|css)?$
  {
 1時間で期限切れになります。
 }

キャッシュ検証

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx10m+の高並列カーネル最適化に関する簡単な説明
  • 高同時実行シナリオにおける nginx 最適化の詳細な説明
  • Nginx で FastCGI を設定および最適化する方法
  • Nginx サービス最適化構成ソリューション
  • nginx を最適化する 6 つの方法

<<:  MySQLとRedisでセカンダリキャッシュを実装する方法の詳細な説明

>>:  MySQL の制限パフォーマンス分析と最適化

推薦する

CSS シャドウアニメーションの最適化のヒント

このテクニックは、この記事から来ています - シルキーでスムーズなパフォーマンスでボックスシャドウを...

Ubuntu でホームディレクトリを新しいパーティションに移行する詳細なチュートリアル

ユーザーのホーム ディレクトリがどんどん大きくなってきたら、ホーム ディレクトリを新しいパーティショ...

Docker で Springboot プロジェクトを実行する実装

導入: springboot プロジェクトを実行する Docker の構成は実は非常にシンプルで、L...

Linuxはscpコマンドを使用してファイルをローカルコンピュータにコピーし、ローカルファイルをリモートサーバーにコピーします。

以下のように表示されます。リモート サーバーのファイルをローカルにコピーします。 scp -r -P...

HTML テーブルタグチュートリアル (46): テーブルフッタータグ

<tfoot> タグは、テーブル フッターのスタイルを定義するために使用されます。基本構...

9999px に別れを告げる新しい CSS 画像置換テクニック (背景表示と画面外へのテキストの移動)

-9999 ピクセルの画像置換技術は、ここ 10 年近く人気があります。テキスト要素を画像に置き換え...

CSS3 で高さと幅を不定にして垂直と水平に中央揃えするいくつかの方法

1. フレックスレイアウト 。父親 { ディスプレイ: フレックス; コンテンツの中央揃え: 中央;...

MySQL 8のパスワードを忘れた場合のベストな対処法の簡単な分析

序文MySQL に精通している読者は、MySQL が非常に迅速に更新されることに気付くかもしれません...

Docker コンテナでネットワーク リクエストが遅くなる問題の解決策

Docker の使用中に、いくつかの問題が発見されました。npm install や bundle ...

Nginx の高同時実行最適化の実践

1. チューニングの必要性​ 私は、どのように書けばいいのか本当に分からないので、共有するために最適...

CentOS 8.4 での Docker パッケージのオフラインインストールの問題について

使用する仮想マシンは、サーバー環境をシミュレートする CentOS 8.4 です。外部ネットワークに...

vscodeで保存した後のHTML自動フォーマットの問題を解決する

vsCode のバージョンは最近更新され、現在のバージョン番号は 1.43 です。実際、vsCode...

JavaScriptのモジュール性を理解する方法

目次1. ブラウザのサポート2.エクスポートモジュールのエクスポート3. モジュールをインポートする...

nginxとバックエンドポート間の競合の解決策

質問: Alice 管理システムを開発しているときに、すべてのバックエンド インターフェイスが最初の...

WeChatミニプログラムの基本チュートリアル:Echartの使用

序文まずは最終的な効果を見てみましょう。私が自分で作った小さなデモです。まずEChartsの公式サイ...