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 の制限パフォーマンス分析と最適化

推薦する

Vueナンバープレート検索コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

jsネイティブ構文プロトタイプ、__proto__、コンストラクタの徹底的な理解

目次1 はじめに2 前提条件2.1 データ型2.2 それが自身のプロパティであるかどうかを判断する ...

初心者がdockerにmysqlをインストールするときに遭遇するさまざまな問題

序文最近、パソコンのシャットダウンに時間がかかることが多く、強制的にシャットダウンするには電源ボタン...

知っておくべき 25 の Vue のヒント

目次1. プロパティを型リストに制限する2. デフォルトのコンテンツと拡張ポイント3. ネストされた...

DockerでKafkaをデプロイする方法

目次1. Dockerをビルドする2. コンテナに入る3. 設定ファイルを変更する4. Kafkaを...

Xftp のダウンロードとインストールのチュートリアル (グラフィック チュートリアル)

Windows と Linux 間でファイルを転送する場合は、Xftp ツールを使用できます。この...

証明書を使用してリモート Docker サーバーに接続する方法

目次1. スクリプトを使用してDockerのTLSを暗号化する2. Dockerの設定を変更してリモ...

MySQL データベースのデータ テーブルの最適化、外部キーの分析、3 つのパラダイムの使用

この記事では、例を使用して、MySQL データベースのデータ テーブルの最適化、外部キーの使用、およ...

MongoDBのパフォーマンスを向上させる方法

MongoDB は高性能なデータベースですが、使用していくうちにパフォーマンスの問題が発生することが...

Web ページのエンコーディングで gbk や gb2312 ではなく utf-8 が使用されるのはなぜですか?

選択肢がある場合は、UTF-8を使用することをお勧めします。実際、Windows システム自体のプロ...

Nginx のリロード プロセスの背後にある真実を探る

本日の記事では、主にNginxのリロードプロセスについて紹介します。実は前回の記事では、nginx ...

レスポンシブ原則をシミュレートするための基礎コードの Vue 実装の例

目次1.Vue.js の機能: 2.Observer.js 関数 (データハイジャック): 3. C...

Linux に nginx をインストールする方法

Nginx は C 言語で開発されており、Linux で実行することをお勧めします。もちろん、Win...

Vueプロジェクトでよく使われる実践的なスキルのまとめ

目次序文1. マルチレベルのデータとイベントの配信には$attrsと$listenersを使用する2...

Centos6 で 20TB を超えるディスクをパーティション分割してフォーマットするためのサンプル コード

1. サーバー環境の構成: 1. ディスクパーティションを確認します。最近、あるプロジェクト内のサー...