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

推薦する

CentOS7 で docker を使用して Apollo 構成センターをデプロイする実装

Apollo オープンソース アドレス: https://github.com/ctripcorp/...

Vue でフルスクリーンを実装し、フルスクリーン終了を監視する

目次序文:実装手順:完全なソースコード:詳細情報:序文: vueでは、デフォルトページを実装し、di...

テーブルの幅を固定して、テキストによって幅が変わらないように設定

ページ内のテーブルの幅を width="600px" に設定した後も、幅が固定さ...

Docker コンテナにおける Patroni の簡単な分析

目次イメージの作成ファイル構造Dockerファイルエントリポイント関数ファイルを生成するイメージを構...

Linux ディレクトリ切り替え実装コード例

ファイルの切り替えは Linux でよく行われる操作です。Linux を初めて学ぶときに最初に触れる...

Nginx の Docker インストールの問題とエラー分析

質問: DockerにNginxをインストールするときに次のエラーが発生しました: docker: ...

vue+px2rem(rem適応)を使用してPCで大画面適応を実装するためのサンプルコード

構成の序文プロジェクト構築: vue-cli3 をベースに構築、rem 適応には postcss-p...

CSSアニメーションを途中で止めて姿勢を維持する方法

序文かつて、難しい問題に遭遇しました。タワークレーンからスイングハウスを落下させる必要がありましたが...

localStorageの有効期限を設定するいくつかの方法

目次問題の説明1. 基本的な解決策2. 中間的な解決策3. 高度なソリューション4. ハードコアソリ...

CocosCreatorでWeChatゲームを作成する方法

目次1. WeChatパブリックプラットフォームからWeChat開発者ツールをダウンロードする2. ...

Dockerイメージの圧縮と最適化操作

Docker が今日非常に人気がある理由は、主にその軽量性、迅速な展開、およびリソースの利用にありま...

axios でリクエストをキャンセルし、重複リクエストを防ぐ方法について簡単に説明します。

目次序文コア - キャンセルトークン実用的なアプリケーションとパッケージングいくつかの小さな詳細序文...

ホバードロップダウンメニューを実装するためのネイティブJS

JS はホバー ドロップダウン メニューを実装します。これは、フロントエンドの面接で遭遇するシナリ...

Nginx の場所と proxy_pass パスの設定の問題の概要

目次1. Nginxロケーションの基本設定1.1 Nginx 設定ファイル1.2 Pythonスクリ...

MySQLの日付加算と減算関数の詳細な説明

1. 追加時間()指定した秒数を日付に追加する select addtime(now(),1); -...