目次
Linux システム パラメータの最適化
ファイル記述子の制限
TCP 接続キューの長さ
一時ポート
Nginx パラメーターの最適化
ワーカー プロセス
KeepAlive
Access-Log缓存
文件描述符限制
ホームページ 運用・保守 Nginx Nginxのパフォーマンス最適化方法

Nginxのパフォーマンス最適化方法

May 28, 2023 am 08:01 AM
nginx

Nginxのパフォーマンス最適化方法

Linux システム パラメータの最適化

以下で説明する構成の一部には、新しい Linux (2.6 以降) カーネルが必要です。筆者は CentOS 7.4 とカーネル バージョン 3.10 を使用していますが、ニーズを満たしていない場合は、適宜アップグレードするのが最善です。結局のところ、パッチ適用はありがたい作業です。システムレベルのチューニングでは、通常、ファイル記述子の制限、バッファーキューの長さ、および一時ポートの数を変更するだけです。

ファイル記述子の制限

各 TCP 接続はファイル記述子を占有するため、ファイル記述子が使い果たされると、問題を改善するために、新しい接続ではこのエラーのような「開いているファイルが多すぎます」が返されます。 1. システム レベルの制限編集ファイル /etc/sysctl.conf に、次の内容を追加します。

fs.file-max =10000000
fs.nr_open =10000000
ログイン後にコピー

ユーザー レベルの制限編集ファイル /etc/security /limits.conf、次のコンテンツを追加します:

 *      hard   nofile      1000000
 *      soft   nofile      1000000
ログイン後にコピー

ユーザー レベルの制限がシステム レベルの制限より低いことを確認する必要があります。そうしないと、SSH 経由でログインできなくなります。変更が完了したら、次のコマンドを実行します。

 $ sysctl -p
ログイン後にコピー

コマンド ulimit -a を実行すると、変更が成功したかどうかを確認できます。

TCP 接続キューの長さ

ファイル /etc/sysctl.conf を編集し、次の内容を追加します。

# The length of the syn quenenet.ipv4.tcp_max_syn_backlog =65535# The length of the tcp accept queuenet.core.somaxconn =65535
ログイン後にコピー

このうち、tcp_max_syn_backlog は、準接続を指定するために使用されます。 SYN キューの長さ。新しい接続が確立されると、接続が到着すると、システムは半接続中の SYN キューを検出します。キューがいっぱいの場合、SYN リクエストは処理できず、統計カウントが ListenOverflows および ListenDrops に追加されます。 /proc/net/netstat.somaxconn は、完全接続された ACCEPT キューの長さを指定するために使用されます。キューがいっぱいの場合、クライアントによって送信された ACK パケットは正しく処理されず、「ピアによって接続がリセットされました」というエラーが返されます。 Nginx は、「アップストリームへの接続中にライブ アップストリームがありません」というエラー ログを記録します。上記のエラーが発生した場合は、これら 2 つの項目の設定を増やすことを検討する必要があります。

一時ポート

Nginx がプロキシとして使用されるため、アップストリーム Web サービスへの各 TCP 接続は一時ポートを占有するため、ip_local_port_range パラメータを変更して /etc/

net.ipv4.ip_local_port_range =102465535
net.ipv4.ip_local_reserved_ports =8080,8081,9000-9010
ログイン後にコピー

このうち、パラメータ ip_local_reserved_ports は、サービスポートが占有されて起動できなくなることを防ぐための予約ポートの指定に使用されます。

Nginx パラメーターの最適化

Nginx パラメーターの最適化は、主に nginx.conf 構成ファイルに焦点を当てていますが、以下では詳しく説明しません。

ワーカー プロセス

Nginx の強力なパフォーマンスの重要な理由は、Nginx がマルチプロセスのノンブロッキング I/O モデルを採用しているため、これを有効に活用する必要があります。

  • worker_processes デフォルトでは、Nginx にはマスター プロセスとワーカー プロセスが 1 つだけあります。これを変更する必要があります。指定した数または CPU の数である auto に設定できます。システムの中核。ワーカーの数が増えると、プロセス間で CPU リソースの競合が発生し、不必要なコンテキストの切り替えが発生する可能性があります。したがって、これを CPU コアの数に設定するだけです。 worker_processes auto

  • worker_connections 各ワーカーが処理できる同時接続の数。デフォルト値の 512 はそうではありません。十分に十分です。使用する場合は、適切に増やします:worker_connections 4096

  • Nginx は、接続を処理するために次の I/O 多重化メソッドをサポートしています: select、pol、kqueue、 epoll、rtsig、/dev/poll、eventport。オペレーティング システムが異なれば使用するツールも異なります。Linux システムでは epoll が最も効率的です。

KeepAlive

Nginx から Web サービスへの頻繁な変更を避けるため接続の確立と切断には、HTTP 1.1 からサポートされている KeepAlive 長時間接続機能を有効にすることで、CPU とネットワークのオーバーヘッドを大幅に削減でき、実際の戦闘においても最大のパフォーマンス向上を実現します。 Keepalive は、proxy_http_version および proxy_set_header と組み合わせて使用​​する必要があります。参照構成は次のとおりです:

upstream BACKEND {
    keepalive 300;
     server 127.0.0.1:8081;
 }
server {
     listen 8080;
    location /{
        proxy_pass http://BACKEND;
        proxy_http_version 1.1;
        proxy_set_header Connection"";
 }
}
ログイン後にコピー

ここで、keepalive はタイムアウトでも接続プールの数でもありません。公式の説明は次のとおりです:

接続パラメーターは、各ワーカー プロセスのキャッシュに保存される上流サーバーへのアイドル状態のキープアライブ接続の最大数を設定します。この数を超えると、最も最近使用されていない接続が閉じられます。

次のことがわかります。これは「アイドル状態の長い接続の最大数」を意味します。この数を超えるアイドル状態の長い接続はリサイクルされます。リクエストの数が安定していてスムーズな場合、アイドル状態の長い接続の数は非常に少なくなります (0 に近くなります)。実際には、リクエストの数は常にスムーズで安定しているとは限りません。リクエストの数が変動すると、アイドル状態の長い接続の数も変動します。

  1. #アイドル状態の長い接続の数が増えると、設定値を超えると、設定値を超える長い接続の部分がリサイクルされます。 ;

  2. 長い接続が十分でない場合は、新しい長い接続が再実行されます。設立。

如果该值过小,连接池会经常进行回收、分配和再回收操作。为了避免这种情况出现,可以根据实际情况适当调整这个值,在我们实际情况中,目标QPS为6000,Web服务响应时间约为200ms,因此需要约1200个长连接,而 keepalive值取长连接数量的10%~30%就可以了,这里我们取300,如果不想计算,直接设为1000也是可行的。

Access-Log缓存

记录日志的I/O开销比较高,好在Nginx支持日志缓存,我们可以利用这个功能,降低写日志文件的频率,从而提高性能。结合使用buffer和flush两个参数可以控制缓存行为

  access_log /var/logs/nginx-access.log buffer=64k gzip flush=1m
ログイン後にコピー

其中 buffer制定了缓存大小,当缓冲区达到 buffer所指定的大小时,Nginx就会将缓存起来的日志写到文件中;flush指定了缓存超时时间,当 flush指定的时间到达时,也会触发缓存日志写入文件操作。

文件描述符限制

Nginx配置中同样有相应的配置项:worker_rlimit_nofile, 理论上这个值应该设置为 /etc/security/limits.conf 中的值除以 worker_processes, 但实际中不可能每个进程均匀分配,所以这里只要设置成和 /etc/security/limits.conf 一样就可以了

 worker_rlimit_nofile 1000000;
ログイン後にコピー

以上がNginxのパフォーマンス最適化方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windowsでnginxを構成する方法 Windowsでnginxを構成する方法 Apr 14, 2025 pm 12:57 PM

Windowsでnginxを構成する方法は? nginxをインストールし、仮想ホスト構成を作成します。メイン構成ファイルを変更し、仮想ホスト構成を含めます。 nginxを起動またはリロードします。構成をテストし、Webサイトを表示します。 SSLを選択的に有効にし、SSL証明書を構成します。ファイアウォールを選択的に設定して、ポート80および443のトラフィックを許可します。

Dockerコンテナの名前を確認する方法 Dockerコンテナの名前を確認する方法 Apr 15, 2025 pm 12:21 PM

すべてのコンテナ(Docker PS)をリストする手順に従って、Dockerコンテナ名を照会できます。コンテナリストをフィルタリングします(GREPコマンドを使用)。コンテナ名(「名前」列にあります)を取得します。

Dockerによってコンテナを起動する方法 Dockerによってコンテナを起動する方法 Apr 15, 2025 pm 12:27 PM

Docker Containerの起動手順:コンテナ画像を引く:「Docker Pull [Mirror Name]」を実行します。コンテナの作成:「docker create [options] [mirror name] [コマンドとパラメーター]」を使用します。コンテナを起動します:「docker start [container name or id]」を実行します。コンテナのステータスを確認してください:コンテナが「Docker PS」で実行されていることを確認します。

Nginxが開始されるかどうかを確認する方法 Nginxが開始されるかどうかを確認する方法 Apr 14, 2025 pm 01:03 PM

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

Docker用のコンテナを作成する方法 Docker用のコンテナを作成する方法 Apr 15, 2025 pm 12:18 PM

Dockerでコンテナを作成します。1。画像を引く:Docker Pull [ミラー名]2。コンテナを作成:Docker Run [Options] [Mirror Name] [コマンド]3。コンテナを起動:Docker Start [Container Name]

Nginxバージョンを確認する方法 Nginxバージョンを確認する方法 Apr 14, 2025 am 11:57 AM

nginxバージョンを照会できるメソッドは次のとおりです。nginx-vコマンドを使用します。 nginx.confファイルでバージョンディレクティブを表示します。 nginxエラーページを開き、ページタイトルを表示します。

nginxでクラウドサーバードメイン名を構成する方法 nginxでクラウドサーバードメイン名を構成する方法 Apr 14, 2025 pm 12:18 PM

クラウドサーバーでnginxドメイン名を構成する方法:クラウドサーバーのパブリックIPアドレスを指すレコードを作成します。 NGINX構成ファイルに仮想ホストブロックを追加し、リスニングポート、ドメイン名、およびWebサイトルートディレクトリを指定します。 nginxを再起動して変更を適用します。ドメイン名のテスト構成にアクセスします。その他のメモ:SSL証明書をインストールしてHTTPSを有効にし、ファイアウォールがポート80トラフィックを許可し、DNS解像度が有効になることを確認します。

nginxサーバーを開始する方法 nginxサーバーを開始する方法 Apr 14, 2025 pm 12:27 PM

NGINXサーバーを起動するには、異なるオペレーティングシステムに従って異なる手順が必要です。Linux/UNIXシステム:NGINXパッケージをインストールします(たとえば、APT-GetまたはYumを使用)。 SystemCtlを使用して、NGINXサービスを開始します(たとえば、Sudo SystemCtl Start NGinx)。 Windowsシステム:Windowsバイナリファイルをダウンロードしてインストールします。 nginx.exe実行可能ファイルを使用してnginxを開始します(たとえば、nginx.exe -c conf \ nginx.conf)。どのオペレーティングシステムを使用しても、サーバーIPにアクセスできます

See all articles