高並列処理 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サウンド効果を実現します

推薦する

CSS3 カスタムスクロールバースタイル::webkit-scrollbar サンプルコード詳細説明

Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...

MySqlデータベースの基礎知識のまとめ

目次基本的なデータベース操作2) データベースを表示する3) データベースを選択する4) データベー...

子コンポーネントを通じて親コンポーネントのプロパティを変更するための Vue のさまざまな実装方法

目次序文一般的な方法1. 親コンポーネントを介して子コンポーネントの発行イベントをリッスンしてpro...

Docker 自動ビルド 自動ビルド実装プロセス図

自動ビルドとは、Docker Hub を使用して、Dockerfile ファイルを含む GitHub...

Tomcat で JNDI データ ソースを構成する 3 つの方法

これまでの仕事では、開発サーバーは一般的にTomcatでした。データソースは、多くの場合、appli...

vsftpdで仮想ユーザーログインを設定する方法

yum で vsftpd をインストールします [root@localhost など]# yum -...

MySQLパスワード変更例の詳細な説明

MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...

iframeを使用してページを呼び出すとページがキャッシュされるかどうかの簡単な分析

最近、毎日変更されるページを iframe を使用して呼び出す必要があるプロジェクトがあります。その...

MySQL データベース面接に必須の 3 つのログの紹介

目次1. redo ログ (MySQL ストレージ エンジン InnoDB のトランザクション ログ...

Helloダイアログボックスのデザイン体験の共有

「どうしたの?」特定の種類のダイアログ ボックスに慣れていない限り、ダイアログ ボックスが表示された...

JS の難しさ 同期と非同期、スコープとクロージャ、プロトタイプとプロトタイプ チェーンの詳細な説明

目次JS スリーマウンテンズ同期 非同期同期と非同期の違い範囲、終了関数スコープチェーンブロックスコ...

LinuxでRPMを使用してmysql5.7.17をインストールする

LinuxでのMySQL5.7 rpmのインストール方法を参考までに記録します。具体的な内容は以下の...

Linux シェル環境での Zabbix API の使用

Linux シェル環境で直接呼び出すことができます。公式 Web サイトによると、Zabbix のデ...

Docker に MySQL をデプロイする例

目次1 コンテナクラウドとは何ですか? 2 Dockerの紹介3 dockerを使ってMySQLをイ...

画像にマウスを置いたときにズームイン/ズームアウトするには JS を使用します

マウスが画像上にあるときにズームインおよびズームアウトするには、JS を使用します。具体的なコードは...