高並列処理 nginx サーバー向け Linux カーネル最適化構成の説明

高並列処理 nginx サーバー向け Linux カーネル最適化構成の説明

デフォルトの Linux カーネル パラメータは最も一般的なシナリオに基づいており、高い同時アクセスをサポートする Web サーバーの定義を満たしていないことは明らかです。そのため、Nginx のパフォーマンスを向上させるには、Linux カーネル パラメータを変更する必要があります。

カーネルを最適化する際にできることはたくさんありますが、通常はビジネスの特性に応じて調整します。Nginx を静的 Web コンテンツ サーバー、リバース プロキシ、または圧縮を提供するサーバーとして使用する場合、カーネル パラメータの調整は異なります。ここでは、Nginx がより多くの同時リクエストをサポートできるようにする最も一般的な TCP ネットワーク パラメータの簡単な構成を行います。

以下の Linux システム カーネルの最適化構成は、オンライン ビジネス システムによってテストされており、約 100,000 の同時接続を持つサーバーで正常に動作しています。整理するのに時間がかかりましたが、ここで皆さんと共有したいと思います。専門家の方が構成に問題があると感じた場合は、ぜひ指摘してください。

# TCPシンクッキーの使用を制御します

# は再利用を有効にすることを示します。 TIME-WAIT ソケットを新しい TCP 接続に再利用できるようにします。デフォルト値は 0 で、閉じていることを意味します。
ネット.ipv4.tcp_syncookies = 1

#接続要求が多い場合にカーネルの動作を制御するブールフラグ。有効にすると、サービスが過負荷になった場合にカーネルが積極的に RST パケットを送信します。
net.ipv4.tcp_abort_on_overflow = 1

#システムが同時に維持できる TIME_WAIT の最大数を示します。この数を超えると、TIME_WAIT は直ちにクリアされ、警告メッセージが出力されます。
#デフォルト値は180000ですが、6000に変更してください。 ApacheやNginxなどのサーバーの場合、このパラメータはTIME_WAITの最大数を制御できます。TIME_WAITの数が多いとサーバーは遅くなります。net.ipv4.tcp_max_tw_buckets = 6000

#選択的応答 net.ipv4.tcp_sack = 1

#このファイルは、TCP/IP セッションのスライディング ウィンドウ サイズが可変かどうかを示します。パラメータ値はブール値で、1 は変更可能、0 は不変であることを意味します。 TCP/IP は通常、高速ネットワークに適した 65535 バイトの最大ウィンドウ サイズを使用します。
#この値は小さすぎる可能性があります。この機能を有効にすると、TCP/IP スライディング ウィンドウのサイズを数桁増やすことができ、データ転送容量が向上します。
net.ipv4.tcp_window_scaling = 1

#TCP受信バッファ net.ipv4.tcp_rmem = 4096 87380 4194304

#TCP 送信バッファ net.ipv4.tcp_wmem = 4096 66384 4194304

# # ソケットメモリ不足
ネット.ipv4.tcp_mem = 94500000 915000000 927000000

#このファイルは、各ソケットに許可される最大バッファ サイズを示します。
ネットコアオプトメモリ_max = 81920

#このファイルは、送信ソケット バッファ サイズのデフォルト値 (バイト単位) を指定します。
ネットコアwmem_default = 8388608

#送信ソケット バッファの最大サイズ (バイト単位) を指定します。
ネットコアのwmem_max = 16777216

#受信ソケット バッファ サイズのデフォルト値 (バイト単位) を指定します。
ネットコアrmem_default = 8388608

#受信ソケット バッファの最大サイズ (バイト単位) を指定します。
ネットコアrmem_max = 16777216

#SYN キューの長さを示します。デフォルトは 1024 です。キューの長さを 10200000 に増やすと、接続を待機しているネットワーク接続の数を増やすことができます。

ネット.ipv4.tcp_max_syn_backlog = 1020000

#各ネットワーク インターフェイスがパケットを受信する速度がカーネルがこれらのパケットを処理する速度よりも速い場合に、キューに送信できるパケットの最大数。
ネット.コア.ネットdev_max_backlog = 862144

#Web アプリケーションの listen 関数のバックログにより、カーネル パラメータ net.core.somaxconn がデフォルトで 128 に制限され、nginx によって定義された NGX_LISTEN_BACKLOG はデフォルトで 511 になるため、この値を調整する必要があります。
ネット.コア.somaxconn = 262144

# システム内で、どのユーザー ファイル ハンドルにも関連付けられていない TCP ソケットの最大数。この数を超えると、孤立した接続は直ちにリセットされ、警告メッセージが出力されます。


#この制限は単純なDoS攻撃を防ぐためだけのものです。これに頼りすぎたり、この値を人為的に減らしたりしないでください。代わりに、この値を増やしてください。net.ipv4.tcp_max_orphans = 327680

#Timestamp を使用すると、シーケンス番号の折り返しを回避できます。 1Gbps リンクでは、以前に使用されたシーケンス番号が必ず発生します。タイムスタンプにより、カーネルはそのような「異常な」パケットを受け入れることができます。これをオフにする必要があります。
net.ipv4.tcp_timestamps = 0

#もう一方の端との接続を開くには、カーネルは前の SYN に応答して SYN と ACK を送信する必要があります。これは、いわゆる 3 ウェイ ハンドシェイクにおける 2 回目のハンドシェイクです。この設定は、接続を放棄する前にカーネルが送信する SYN+ACK パケットの数を決定します。
ネット.ipv4.tcp_synack_retries = 1

#カーネルが接続の確立を諦める前に送信する SYN パケットの数。ホームページ
ネット.ipv4.tcp_syn_retries = 1

#TCP 接続で TIME-WAIT ソケットの高速リサイクルを有効にすることを示します。デフォルト値は 0 で、シャットダウンを示します。
ネット.ipv4.tcp_tw_recycle = 1

# は再利用を有効にすることを示します。 TIME-WAIT ソケットを新しい TCP 接続に再利用できるようにします。デフォルト値は 0 で、閉じていることを意味します。
ネット.ipv4.tcp_tw_reuse = 1

#システムのデフォルトのTIMEOUT時間を変更します。
ネット.ipv4.tcp_fin_timeout = 15

#キープアライブが有効な場合に TCP がキープアライブ メッセージを送信する頻度を示します。デフォルト値は 2 時間ですが、20 分に変更することをお勧めします。
ネット.ipv4.tcp_keepalive_time = 30

# は、送信接続に使用されるポート範囲を示します。デフォルトは非常に小さいです: 32768 ~ 61000、10000 ~ 65000 に変更します。 (注意: 最小値を低く設定しすぎないでください。そうしないと、通常のポートが占有される可能性があります。)
net.ipv4.ip_local_port_range = 1024 65000

#以下では、ip_conntrack モジュール modprobe ip_conntrack のロードが必要になる場合があります。一部のドキュメントでは、このモジュールはファイアウォールがオンになっている場合は無効であると記載されています。#確立された net.netfilter.nf_conntrack_tcp_timeout_established = 180 のタイムアウトを短縮します

#CONNTRACK_MAX 最大許容接続追跡エントリ数。これは、カーネル メモリ内で netfilter が同時に処理できる「タスク」(接続追跡エントリ) です。
ネット.netfilter.nf_conntrack_max = 1048576
ネット.nf_conntrack_max = 1048576

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • google-perftools を使用して高同時実行時の nginx パフォーマンスを最適化するチュートリアル (完全版)
  • 単一のウェブサーバーでウェブサイトのパフォーマンスを最大化する方法
  • Nginx10m+の高並列カーネル最適化に関する簡単な説明
  • 高同時実行シナリオにおける nginx 最適化の詳細な説明
  • 高い同時実行性の下でNginxのパフォーマンスを最適化する方法をまとめます

<<:  MySQL IN ステートメントにおける低速クエリの効率を最適化する手法の例

>>:  jsはaudioContextを通じて3Dサウンド効果を実現します

推薦する

HTML要素のID属性とName属性の違い

今日、私は <a href="#13"></a> につい...

NavicatがMySQLに接続すると、10060、1045エラーとmy.iniの場所が報告されます。

Navicat は、データベースに接続するときにエラー 10060 および 1045 を報告します...

Vue.jsはカレンダー機能を実装します

この記事では、カレンダー機能を実装するためのVue.jsの具体的なコードを例として紹介します。具体的...

JavaScript による Web ページ カルーセルの超詳細な実装

目次HTML ページの作成js部分の機能を実装する1. 左ボタンと右ボタン2. 小さな円を動的に生成...

JavaScript コンソールのその他の機能

目次概要コンソールログコンソール.infoコンソール.警告コンソールエラーコンソールテーブルコンソー...

Linux mpstat コマンドの使用方法の詳細な説明

1. mpstatコマンド1.1 コマンド形式 mpstat [ -A ] [ -u ] [ -V ...

ふるい抽選を実施するミニプログラム

この記事の例では、ふるい抽選を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

MySQL Workbenchのダウンロードと使用方法のチュートリアルの詳細な説明

1. MySQL WorkbenchをダウンロードするWorkbench は、MySQL のグラフィ...

nginxのインストールと設定の詳細なプロセス記録

目次1 nginxの紹介1 nginxとは何か2 つのアプリケーション シナリオ2 nginxのイン...

スクロールバーを非表示にする HTML の簡単な実装

1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...

MySQL 5.7.22 バイナリパッケージのインストールとインストール不要版 Windows 設定方法

次のコードは、MySQL 5.7.22 バイナリ パッケージのインストール方法を紹介しています。具体...

Mysql SQL ステートメントのコメント

MySQL SQL ステートメントにコメントを追加できます。MySQL SQL ステートメントのコメ...

VMWare ネットワーク アダプタの 3 つのモードの実装プロセスの分析

3つのモードブリッジ(ブリッジ モード)、NAT(ネットワーク アドレス変換モード)、ホストオンリー...

Vue3 の SetUp 関数のプロパティとコンテキスト パラメータの詳細な説明

1. setUp関数の最初のパラメータpropsセットアップ(プロパティ、コンテキスト){}最初のパ...