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 の一時テーブルとパーティションテーブルの違いの詳細な説明

推薦する

Vueはテーブルページング機能を実装します

この記事では、テーブルページング機能を実現するためのVueの具体的なコードを例として紹介します。具体...

jQueryはすべてのショッピングカート機能を実装します

目次1. すべて選択2. 商品の数量を増やすか減らす3. 商品の小計を変更する4. 合計と合計額を計...

Linux系でよく使われる運用・保守コマンド(まとめ)

目次1. システム監視2. ファイル操作3. ネットワーク通信4. システム管理仕事で必要なLinu...

ウェブデザイン:大量の素材の正確な配置と使用

3回の暗記により、大量の資材の正確な場所と目的を記憶でき、その使いやすさが向上します。 これは単なる...

CentOS 7.x のマスターおよびスレーブ DNS サーバーの展開

1. 準備例: 2 台のマシン: 192.168.219.146 (マスター)、192.168.21...

HTML テーブル マークアップ チュートリアル (5): ライト ボーダー カラー属性 BORDERCOLORLIGHT

表では、左上の境界線の色を個別に定義したり、セルの右下の境界線の色を定義したりできます。これら 2 ...

WebWorkerはJavaScriptサンドボックスの詳細をカプセル化します

目次1. シナリオ2. IJavaScriptShadowboxを実装する2.1 メインスレッドの実...

CSS3アニメーションジャミングソリューションについての簡単な説明

なぜ詰まっているのでしょうか?言及しなければならない前提があります。フロントエンド開発者は皆、ブラウ...

Vue のトランジション効果とアニメーショントランジションの使用例の詳細な説明

目次遷移フック関数カスタム遷移クラス名遷移グループの使用まとめまずは例を見てみましょうコードは次のと...

NodeサイトのForever+nginx導入方法例

私は最近、最も安い Tencent クラウド サーバーを購入しました。これは主に、Web テクノロジ...

Vueでルーティング権限を動的に設定する主なアイデア

以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとは...

Docker ベースの Selenium 分散環境の構築

1.画像をダウンロードするdocker pull selenium/hub docker pull ...

Nginxのアクセス制限設定の詳細な説明

Nginxのアクセス制限設定とはNginx のアクセス制限は、IP ベースのアクセス制御とユーザーベ...

CSS での配置の使用方法の詳細な研究 (要約)

CSS における位置指定の概要position属性は英語で位置を意味し、 CSSでの主な機能は要素...

MySQL で datetime 型のデフォルト値を設定する方法

Navicat クライアントを通じてデフォルトの日時値を変更する際に問題が発生しました。データベース...