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

推薦する

MySQL alter ignore構文の詳細な説明

今日仕事中に、ビジネス側から次のような質問をされました。テーブルがあり、一意のフィールドを追加する必...

CentOS 6 および 7 での MySQL 5.7 の詳細なインストール チュートリアル

開発には常にデータが必要です。サーバーとしての Linux では、テスト データを格納するためのデー...

テーブル切り替えのための JavaScript プラグインのカプセル化

この記事では、テーブル切り替えプラグインを実装するためのJavaScriptのカプセル化コードを参考...

Vue でよく使われる命令 v-if と v-show の違いを簡単に分析します。

目次序文1.v-ショー2.v-if 3. v-showとv-ifの違い1. 原則の違い2. アプリケ...

ミニプログラムは左スライドのドロワーメニューをネイティブに実装します

目次WXS レスポンス イベントプランAページ構造とスタイルWXS イベントコールバック関数WXS ...

MySQL における datetime と timestamp の違いと選択

目次1 違い1.1 スペース占有1.2 表現範囲1.3 タイムゾーン2 テスト3つの選択肢MySQL...

nginx のロードバランシングとリバースプロキシの説明

目次負荷分散負荷分散分類1. DNS 負荷分散2. IP負荷分散3. リンク層の負荷分散4. ハイブ...

SVNサービスバックアップ操作手順の共有

SVN サービスのバックアップ手順1. ソースサーバーとターゲットサーバーを準備するソースサーバー:...

Vue は小数点付きの星評価を実装します

この記事では、小数点付きの星評価を実装するためのVueの具体的なコードを参考までに共有します。具体的...

JS配列メソッドsome、every、findの使用に関する詳細

目次1. いくつか2. すべての3. 見つける1. いくつかsome()メソッドは、指定された関数の...

CentOS での Docker の詳細なインストール チュートリアル

DockerにはCEとEEがあり、CE版はコミュニティ版(無料)、EE版はセキュリティを重視したエン...

Linux で SSH 経由でリモート ファイルシステムをマウントする方法の詳細な説明

SSHFS の機能: FUSE(Linux向けの最高のユーザー空間ファイルシステムフレームワーク)を...

MySQL 5.7.17無料インストール版のインストールと設定

MYSQLバージョン:MySQL Community Server 5.7.17、インストール不要版...

JavaScript タイマー原理の詳細な説明

目次1. setTimeout() タイマー2. setTimeout() タイマーを停止する3. ...

Win10の明るさ調整効果を模倣するHTML+CSS+JSサンプルコード

HTML+CSS+JS で Win10 の明るさ調整効果を模倣コード <!doctypehtm...