Linux サーバーが処理できる接続数をご存知ですか?

Linux サーバーが処理できる接続数をご存知ですか?

序文

まず、TCP 接続を識別する方法を見てみましょう。システムは、(src_ip、src_port、dst_ip、dst_port)、つまり送信元 IP、送信元ポート、宛先 IP、宛先ポートの 4 つのタプルによって識別されます。たとえば、192.168.0.1 にポート 80 が開いているサービスがあるとします。この場合、すべてのクライアントはこのサービスのポート 80 に接続します。よく誤解されるのが、マシンには 65536 個のポートがあるため、マシンが伝送する接続の数も 65536 個であるということです。この記述は大きく間違っており、送信元ポートとアクセス先ポートを混同しています。ストレステストを行う際には、ストレステストクライアントを使用します。このクライアントの接続数はポート数によって制限されますが、サーバー上の接続数は数万、一般的には最大 100 万 (4C8G 構成) に達することがあります。上限については、最適化の度合いによって異なります。具体的な手順は次のとおりです。

対象サーバーのストレス テストを行っており、負荷がかかった状態での接続数を確認したいと考えています。特定の数までストレスをかけると、コンソールに突然「開いているファイルが多すぎます」と表示されます。これは、Linux システムが TCP 接続を作成するときにソケット ハンドルを作成し、各ソケット ハンドルがファイル ハンドルであるためです。オペレーティング システムでは、開いているファイル ハンドルの数に制限があります。 Unix/Linux の基本的な考え方の 1 つは、「すべてがファイルである」ということです。TCP の伝送容量を増やすには、ファイル ハンドルを調整する必要があります。

ステップ1: ファイルハンドル制限を変更する

# TCP ulimit -n で現在のユーザーが開くことができるファイルハンドルの最大数を表示します

# ファイルハンドルを変更する vim /etc/security/limits.conf

*ソフトnofile655350
* ハード ノーファイル 655350

変更後、ターミナル ウィンドウを終了して再度ログインすると (サーバーを再起動する必要はありません)、最新の結果を確認できます。これは最適化の最初のステップであり、ファイル ハンドルの制限を変更します。

知らせ:
Soft nofile (ソフト制限) とは、Linux が現在のシステムが耐えられる範囲内でユーザーが同時に開くことができるファイルの数をさらに制限することを意味します。
ハード制限 (ハード リミット) は、システム ハードウェア リソース (主にシステム メモリ) に基づいて計算された、システムが同時に開くことができるファイルの最大数です。通常、ソフト制限はハード制限以下になります。

ステップ2: TCPパラメータの調整

パラメータデフォルト設定設定を調整する例示する
fs.ファイル最大1048576 9999999すべてのプロセスによって開かれたファイル記述子の数
fs.nr_open 1635590 1635590単一プロセスで割り当てられるファイルの最大数
ネットコアrmem_default 124928 262144デフォルトのTCP読み取りバッファ
ネットコア124928 262144デフォルトのTCP送信バッファ
ネットコアrmem_max 124928 8388608デフォルトのTCP最大読み取りバッファ
ネットコアのwmem_max 124928 8388608デフォルトのTCP最大送信バッファ
ネット.ipv4.tcp_wmem 4096 16384 4194304 4096 16384 8388608 TCP送信バッファ
ネット.ipv4.tcp_rmem 4096 87380 4194304 4096 87380 8388608 TCP 読み取りバッファ
ネット.ipv4.tcp_mem 384657 512877 769314 384657 512877 3057792 TCPメモリサイズ
net.core.netdev_max_backlog 1000 5000各ネットワーク インターフェイスでパケットが受信される速度がカーネルがパケットを処理できる速度よりも速い場合に、キューに送信できるパケットの最大数。
ネットコアオプトメモリ最大20480 81920各ソケットに許可される最大バッファサイズ
ネットコア128 2048各ポートの最大リスニング キューの長さ。これはグローバル パラメータです。
ネット.ipv4.tcp_fin_timeout 60 30ローカル側で切断されたソケット接続に対して TCP が FIN-WAIT-2 状態に留まる時間 (秒単位)。相手側が接続を切断したり、接続を終了しなかったり、プロセスが予期せず終了したりする可能性があります。
net.core.netdev_max_backlog 1000 10000各ネットワーク インターフェイスでパケットが受信される速度がカーネルがパケットを処理できる速度よりも速い場合に、キューに送信できるパケットの最大数。
ネット.ipv4.tcp_max_syn_backlog 1024 2048キューに保存できるが、相手側によってまだ確認されていない接続要求の最大数。サーバーが頻繁に過負荷になる場合は、この数値を増やしてみてください。
ネット.ipv4.tcp_max_tw_buckets 5000 5000システムが同時に処理できるタイムウェイトソケットの最大数
net.ipv4.tcp_tw_reuse 0 1 TIME-WAITソケットを新しいTCP接続に再利用できるようにするかどうか
ネット.ipv4.tcp_keepalive_time 7200 900データ メッセージの送信がない場合に、TCP リンクがプローブ メッセージ (空のメッセージ) の送信を開始するまでの秒数を示します。
ネット.ipv4.tcp_keepalive_intvl 75 30前回の検出メッセージと次の検出メッセージ間の時間間隔を示します
net.ipv4.tcp_keepalive_probes 9 3検出数を示します

上記の構成パラメータから、Linux カーネルで TCP 送受信用のバッファ キューが設定されており、システムのスループットを向上できることがわかります。

上記のパラメータはすべて /etc/sysctl.conf ファイルで定義されています。一部のパラメータはファイルで定義されていない場合があります。システムによってデフォルト値が与えられます。それらを変更する必要がある場合は、ファイル内で直接追加または変更してから、sysctl -p コマンドを実行して有効にします。

知らせ:
パラメータ値が大きいほど、より良い結果が得られます。一部のパラメータは、サーバーのハードウェア構成と、サーバー上の他のサービスに対するパラメータの影響に基づいて考慮する必要があります。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Linux 負荷分散のレイヤー 4 負荷分散とレイヤー 7 負荷分散の違いの概要
  • Linux で nginx ロード バランシングを構築する方法
  • Linuxシステム構成の詳細な説明 nginx ロードバランシング
  • 負荷分散を実現するための Linux デュアル ネットワーク カード バインディングの詳細な説明
  • Linux で DNS を使用してシンプルな負荷分散を実装する方法
  • LinuxのCPU負荷とCPU使用率の詳細な説明

<<:  MySQLでグローバル変数とセッション変数を設定する2つの方法の詳細な説明

>>:  MySQL データベースを手動および自動でバックアップする 8 つの方法

推薦する

HTMLの行間設定方法と問題点

<p></p> の行間隔を設定するには、style="line-h...

Linux で MySQL 8.0 バージョンをアンインストールする方法

1. MySQLをシャットダウンする [root@localhost /]# サービスmysqldを...

システムエラー 1067 を解決するための MySQL データベース グリーン バージョンのインストール チュートリアル

ソフトウェアのグリーンバージョンとインストールバージョンの違いは何ですか?通常、ファイルのインストー...

Windows での MySQL 5.7.20 のインストールと設定方法のグラフィック チュートリアル

参考までにWindowsにMySQLをインストールします。具体的な内容は次のとおりです。 1.まずM...

Docker Alibaba Cloud RocketMQ 4.5.1 のデプロイプロセスの詳細な説明

検索ミラー docker 検索 rocketmq画像バージョンを表示他の画像を表示したい場合は、画像...

MySQL 8.0.17 winx64 (Navicat 付き) 手動構成バージョンのインストール チュートリアル図

1. ダウンロードアドレス: mysql-8.0.17-winx64ダウンロードして解凍する2. フ...

Vue3 を使用して虫眼鏡効果を実現する方法の例

目次序文1. カプセル化の重要性2. どのようにカプセル化しますか? 1. 準備2. 梱包を開始する...

MySQL インデックスのカーディナリティの概念と使用例

この記事では、例を使用して、MySQL インデックス カーディナリティの概念と使用方法を説明します。...

MySQL データベースのバックアップとリカバリの実装コード

データベースのバックアップ #文法: # mysqldump -h server-u usernam...

MySQL 8.0.20 圧縮版のインストールチュートリアル(画像とテキスト付き)

1. MySQL ダウンロード アドレス。 http://ftp.ntu.edu.tw/MySQL...

docker に nacos をインストールしてデータベースを構成する詳細なチュートリアル

環境の準備 Docker環境 MySQL 5.7 (公式イメージはmysql8をサポートしていません...

クラウドサーバーパゴダパネルの詳細なインストール手順

目次0x01. パゴダパネルをインストールする0x02. サーバーポートを開く0x03. ブラウザを...

ユーザーはその理由を知る必要がある

証券会社にいた頃、設計業務が忙しくなかったため、商品のマニュアルを書く役割を担ったことがありました。...

Vant+postcss-pxtoremはブラウザ適応機能を実装します

Remレイアウトの適応Vant のスタイルでは、デフォルトで px を単位として使用します。rem ...

1 行または複数行のテキストがオーバーフローしたときに省略記号を表示する CSS を実装する方法

1. 単一行オーバーフロー1. 1 行がオーバーフローした場合、超過部分は表示されます...または、...