Linux システムの最適化 (カーネルの最適化) に関するいくつかの提案

Linux システムの最適化 (カーネルの最適化) に関するいくつかの提案

スワップを無効にする

サーバーがデータベース サービスまたはメッセージ ミドルウェア サービスを実行している場合は、スワップ パーティションを無効にしてください。

echo "vm.swappiness = 0" >> /etc/sysctl.conf
sysctl -p

OOMキラー

通常、Linux サービスは共存サービスであり、各プログラムが要求する物理メモリは共有されます。たとえば、物理メモリが 1 GB しかない場合、2 つのプログラムを起動してそれぞれ 1 GB を要求することができます。Linux はこの過剰割り当て方式を使用してメモリを最大限に活用します。プログラムが実際に使用するメモリが物理メモリを超えると、システムは優先度に応じて一部のプログラムを強制終了し、他のプログラムの正常な動作を確保します。コア サービスの強制終了を回避するために、プロセス ファイルを最高の優先度に設定できます。

# 値が小さいほど、強制終了される可能性が低くなります echo -17 > /proc/$pid/oom_score_adj

通信プロトコル

当社が提供するデータベースと一部のメッセージ ミドルウェア サービスはすべてイントラネット上で動作するため、イントラネットの TCP パラメータを最適化できます。

  • ネット.ipv4.tcp_syn_retries

デフォルト値は 6、参照値は 2 です。ホストがクライアントとして動作し、3 ウェイ ハンドシェイクの最初のステップである外部への TCP 接続を開始すると、カーネルは SYN メッセージを送信し、指定された回数だけ再試行します。この回数を超えると、接続は破棄されます。イントラネット環境では通信が良好なので、この値は適切に削減できます。

  • ネット.ipv4.tcp_synack_retries

デフォルト値は 5、参照値は 2 です。ホストがサーバーとして機能し、TCP 接続を受け入れる場合、3 ウェイ ハンドシェイクの 2 番目のステップで、クライアントに SYN+ACK メッセージを送信して再試行し、この回数の再試行後に接続を放棄します。この値はイントラネット環境では適切に減らすことができます。

  • net.ipv4.tcp_タイムスタンプ

タイムスタンプを有効にするかどうか。有効にすると、RTT をより正確に計算できます。他のいくつかの機能もタイムスタンプ フィールドに依存します。

  • net.ipv4.tcp_tw_reuse

デフォルト値は 0 で、推奨値は 1 です。 TIME_WAIT 状態のソケットを新しい TCP 接続に使用することを許可するかどうか。これは TIME_WAIT の数を減らすのに非常に効果的です。このパラメータは、tcp_timestamps が有効な場合にのみ有効になります。

  • ネット.ipv4.tcp_tw_リサイクル

TIME_WAIT ソケットの高速リサイクルを有効にするかどうか。これは tcp_tw_reuse よりも根本的な方法であり、tcp_timestamps オプションにも依存します。 tcp_tw_recycle を有効にしないことを強くお勧めします。その理由は 2 つあります。まず、TIME_WAIT は、閉じる接続のデータと新しく確立された接続のデータが混同されないようにするために必要な状態です。次に、tcp_tw_recycle オプションにより、NAT 環境では一部の新規接続が拒否されます。NAT では各ホストに時間差があるため、これはソケットのタイムスタンプ フィールドに反映されます。サーバーは、増加されるはずの特定の IP のタイムスタンプが減少したことを検出し、相対的に減少したタイムスタンプを持つメッセージは破棄されます。

  • ネットコア

デフォルト値は 128、参照値は 2048 です。システム内の各ポートの最大リスニング キューの長さを定義します。サーバーがポートをリッスンすると、オペレーティング システムはクライアントの接続要求に対する 3 ウェイ ハンドシェイクを完了します。確立された接続はキューに保存され、受け入れ呼び出しによって解除されるのを待機します。このオプションはキューの長さを定義します。この値を増やすと、同時実行性の高いシナリオでサーバー側の拒否の数を減らすことができます。

  • ネット.ipv4.tcp_max_syn_backlog

クライアントの要求は、サーバー側の 2 つのキューによって管理されます。1 つは、クライアントとの接続が確立され、受け入れを待機しているキューです。このキューの長さは、somaxconn パラメータによって制御されます。もう 1 つは、確立中だが完了していない接続が格納される別のキューです。このキューの長さは、tcp_max_syn_backlog によって制御されます。デフォルトは 128 ですが、8192 に調整できます。

  • ネット.ipv4.tcp_max_tw_buckets

デフォルト値は 4096、参照値は 100000 です。システムが同時に維持できる TIME_WAIT ソケットの最大数を定義します。この数を超えると、TIME_WAIT ソケットは直ちにクリアされ、警告メッセージが出力されます。システムが過剰な TIME_WAIT によって問題を抱えている場合は、tcp_max_tw_buckets、tcp_tw_reuse、tcp_timestamps の 3 つのオプションを調整して問題を軽減できます。 TIME_WAIT 状態は、TCP セッションを能動的に閉じる側が閉じられたときに発生します。問題を根本的に解決したい場合は、サーバーではなくクライアントが能動的に接続を閉じるようにします。

ページキャッシュ

ページ キャッシュは、システムのダーティ ページであり、システムの IO キャッシュです。データはディスクに書き込まれる前に、まずページ キャッシュに書き込まれ、その後非同期的にディスクにフラッシュされます。書き込みキャッシュにより IO アクセス速度が向上しますが、データ損失のリスクも高まります。

ページ キャッシュからディスクにフラッシュする機会は 3 つあります。

  • 使用可能な物理メモリが特定のしきい値を下回った場合に、システムの空きメモリを解放します。
  • ダーティ ページの常駐時間が特定のしきい値を超えた場合に、ダーティ ページがメモリ内に無期限に残ることを防ぎます。
  • ユーザーからの sync() または fsync() 呼び出しによってトリガーされます。

システムによって実行されるフラッシュには、次の 2 つの書き込み戦略があります。

  • ユーザー I/O をブロックせずにディスク フラッシュを非同期に実行します。
  • フラッシュは同期的に実行され、ダーティ ページが特定のしきい値を下回るまでユーザー I/O はブロックされます。

通常、システムは最初の戦略を最初に実行します。ダーティ ページ データの量が多すぎて、非同期実行ではディスク フラッシュを時間内に完了できない場合は、同期モードに切り替わります。

カーネル パラメータを使用して、ダーティ データのフラッシュしきい値を調整できます。

  • vm.dirty_background_ratio、デフォルト値は 10 です。このパラメータはパーセンテージを定義します。メモリ内のダーティ データがこのパーセンテージを超えると、システムは非同期メソッドを使用してデータをディスクにフラッシュします。
  • vm.dirty_ratio、デフォルト値は 30 です。パーセンテージも定義されています。メモリ内のダーティ データがこのパーセンテージを超えると、システムはディスクを同期的にフラッシュし、ダーティ データが dirty_ratio より低くなるまで書き込み要求はブロックされます。それでも dirty_background_ratio より高い場合は、非同期ディスク フラッシュに切り替えます。したがって、dirty_ratio は dirty_background_ratio よりも高くする必要があります。

パーセンテージ制御に加えて、有効期限も指定できます: vm.dirty_expire_centisecs。デフォルト値は 3000 (30 秒) で、単位は 100 分の 1 秒です。この時間が経過すると、ダーティ データは非同期でディスクにフラッシュされます。

次のコマンドを使用して、システム内の現在のダーティ ページの数を表示できます。

cat /proc/vmstat |egrep "dirty|writeback"
ダーティ数 951
ライトバック数 0
ライトバック時間 0
#出力には、ディスクへの書き込みを待機しているダーティ ページが 951 個あることが示されています。デフォルトのページ サイズは 4KB です。さらに、この情報は /proc/meminfo ファイルでも確認できます。

データ セキュリティ要件がそれほど高くなく、読み取りがキャッシュにヒットしやすくするためにより多くのデータを「キャッシュ」したい場合は、ダーティ データ比率と有効期限を増やすことができます。

vm.dirty_background_ratio = 30
vm.ダーティ比率 = 60
vm.dirty_expire_centisecs = 6000

同様に、ディスク フラッシュによって io がブロックされることを望まない場合は、非同期ディスク フラッシュの値を適切に減らすと、io がスムーズになります。

vm.dirty_background_ratio = 5
vm.ダーティ比率 = 60

上記は Linux システムの最適化 (カーネルの最適化) に関する詳細な提案です。Linux システムの最適化の詳細については、123WORDPRESS.COM の他の関連記事にご注目ください。

以下もご興味があるかもしれません:
  • MySQL 5.7 をバイナリモードでインストールし、Linux でシステムを最適化する手順
  • PHP+swoole+linuxによるシステム監視とパフォーマンス最適化の操作例
  • Mysql オペレーティング環境の最適化 (Linux システム)
  • Linux Apache サーバーシステムのセキュリティ設定と最適化
  • Linux オペレーティングシステムの最適化とセキュリティに関する簡単な説明

<<:  Vueログイン機能の実装

>>:  Mysql の一時テーブルとパーティションテーブルの違いの詳細な説明

推薦する

webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます

TypeScript バンドルwebpack 統合通常、実際の開発では、ビルド ツールを使用してコー...

Docker での FastAPI デプロイの詳細なプロセス

Docker 学習https://www.cnblogs.com/poloyy/p/15257059...

Centos7 DockerでNginxファイルを変更するプロセスの詳細な説明

1. docker に nginx をインストールします。 docker に Nginx をインスト...

MYSQL の解凍版における中国語の文字化け問題の解決方法

MYSQLの解凍バージョンがインストールされます1: 解凍後、my.ini ファイルをコピーし、バイ...

JavaScript Domはカルーセルの原理と例を実装します

カルーセルを作りたい場合、まずその原理を理解する必要があります。画像を右から左にスライドさせるにはど...

MySQL スケジュールタスク (EVENT イベント) を詳細に設定する方法

目次1. イベントとは何ですか? 2. 「イベント」機能を有効にする1. 機能が有効になっているかど...

MySQL 4G メモリ サーバー構成の最適化

会社のウェブサイトのアクセス数が増えてくると(1日10万PV以上)、当然MySQLがボトルネックにな...

Windows システムに MySQL を素早くインストールして展開する方法 (グリーンの無料インストール バージョン)

まずは緑色の無料インストール版のMySQLをダウンロードします。任意のフォルダに入れて構いません。今...

Dockerでイメージをプルするための手順を完了する

1. Docker pullはイメージをプルします$ docker pull {IMAGE_NAME...

ゲーム開発におけるサウンド処理にCocosCreatorを使用する方法

目次1. Cocos Creatorでのオーディオ再生の基本1. 基本2. 一般的な方法2. Coc...

Vue3ルーティングVueRouter4を使用する簡単な例

ルーティングvue-router4 では API の大部分は変更されていないため、変更点のみに焦点を...

MySQL はどのようにしてデータベースの削除と暴走を効果的に防ぐことができますか?

目次セーフモード設定テスト1. where句なしで更新および削除する2. 非インデックスキーの削除3...

JavaScriptプロトタイプと例の詳細な説明

目次コンストラクタインスタンスとプロトタイプの関係プロトタイププロパティ属性またはメンバーの検索原則...

Nginx + consul + upsync を使用して動的負荷分散を実現する方法の詳細な説明

目次前提条件DNSドメイン名解決プロセス外部ネットワークマッピングnginxコア知識nginxとはア...

MySQL の詳細な単一テーブルの追加、削除、変更、クエリの CRUD ステートメント

MySQL の追加、削除、変更、クエリステートメント1. 練習シートを作成するここでの練習表は3つの...