GNU/Linux >> Linux の 問題 >  >> Linux

クラウドインスタンスにスワップスペースを設定する場合と反対する場合の分析

Linuxユーザーとの議論を開始したい場合は、 swapについて質問してください。 メモリー。クッションまたはセーフティネットとして賞賛する人もいれば、松葉杖やシステムパフォーマンスの破壊者としてそれを軽蔑する人もいます。 1960年代に生まれたスワップメモリ​​は、Linux上で何年にもわたって進化し、2つの重要な機能を果たしてきました。

  • システムがRAMをすべて消費し、さらに多くのRAMが必要な場合の緊急メモリ
  • 貴重なシステムRAMを使用するめったに使用されないメモリページ用の駐車場

Red Hatを含む多くのLinuxディストリビューションでは、すべてのシステムにスワップメモリ​​を推奨しています。ただし、さまざまなディストリビューションのほとんどのクラウドインスタンスを見ると、スワップメモリ​​がないことがわかります。

[Linuxのトラブルシューティング101:システムパフォーマンス]

スワップの概要

スワップは、ほとんどのシステムにディスク上のパーティションとして存在します。パーティション分割後、管理者はmkswapを使用してパーティションをフォーマットします 、swaponで有効にします 、カーネルはすぐに利用可能なスワップメモリ​​を確認します。使用可能なパーティションがないシステムでは、スワップファイルを使用できます。スワップファイルは、mkswapでフォーマットされた既存のファイルシステム上のファイルです。 有効になっています。

どちらの方法もうまく機能しますが、既存のパーティションのスワップファイルのオーバーヘッドをスキップするため、パーティションにスワップを配置するとパフォーマンスが向上します。

システムRAMが不足している場合、Linuxはメモリページをスワップに格納して、プロセスの強制終了やシステムのクラッシュを回避できます。ディスクはシステムRAMよりもはるかに低速であり、これにより、システムRAMが解放されるまでシステムパフォーマンスが低下します。システムRAMとスワップが完全に使い果たされるまでメモリ使用量が増え続けると、メモリ不足(OOM)キラーが表示され、十分なRAMが使用可能になるまでプロセスの強制終了を開始します。

スワップサイズに関する長年のアドバイスは、システムのRAMの2倍のサイズです。たとえば、1GBのシステムRAMを搭載したシステムに2GBのスワップを割り当てます。この比率は小規模なシステムではうまく機能しますが、数百ギガバイトのシステムRAMを搭載したシステムではスケールアップしません。

クラウドでのスワップの場合

マイクロサービス(大規模なアプリケーションを形成する小規模な相互接続サービス)の台頭により、企業はより多くの小規模なインスタンスをデプロイするようになりました。インスタンスが小さいほどシステムRAMが少なくなるため、システムに十分な空きメモリが確保されるまで、恐ろしいOOMキラーがプロセスを強制終了するリスクが高まります。

これらのシステムにスワップを追加すると、次の2つの点で役立ちます。

  • まず、高負荷の期間中に、プロセスがシステムRAMから一時的にバーストしてスワップに入る可能性があります。管理者は、監視システムからこれらのイベントについて学習し、システムでバーストが発生している間にバーストの理由を調査する時間があります。メモリリークが発生した場合、開発者はプロセスを検査して、プロセスがまだ機能している間に何が問題になったかを理解できます。これは、管理者がアプリケーションの成長に合わせて、より大きなインスタンスタイプを必要としていることを示している可能性もあります。
  • 次に、Linuxカーネルは、めったに使用されないメモリページを監視し、貴重なシステムRAMを保持するためにそれらをスワップに送信します。 sysctl vm.swappinessの設定 スワップするメモリページをプッシュしたいというカーネルの要求を制御します。これは、めったに使用されないページをスワップメモリ​​にプッシュしながら、システムRAMに最もアクティブなページを保持することで、クラウドインスタンスに役立つ可能性があります。

クラウドでのスワップに対するケース

「ペットと牛」のアナロジーは、クラウドインスタンスについて話すときに頻繁に出てきます。管理者は、動作に問題のあるインスタンスを新しいインスタンスに自動的に置き換えることができるため、スワップを追放します。時間の経過とともに、監視メトリックは、OOMkillerがアプリケーションをオフラインにするために交換が必要なインスタンスの増加を示しています。解決策は、より大きなインスタンス、または負荷がかかった状態でのメモリリークのさらなる調査である可能性があります。 Systemd また、可能な場合はこれらのプロセスを迅速に再開します。

クラウドインスタンスでスワップメモリ​​の場所を選択するには、より多くの検討と計画が必要です。物理サーバーでは、ローカルに接続されたNon-Volatile Memory Express(NVMe)ディスクでのスワップは十分に高速ですが、AWSのElastic Block Storage(EBS)などの外部ストレージがマウントされたクラウドインスタンスはどうでしょうか? EBSのパフォーマンスは、選択したEBSのタイプとシステム上のネイバーによって異なります。リモートストレージシステムでスワップすると、システムがRAMをオーバーフローしたときに、インスタンスのパフォーマンスが低下する可能性があります。管理者は、サーバー処理要求のパフォーマンスが低いことに取り組む代わりに、RAMがオーバーフローしたときに、スワップを省略してこれらのインスタンスを置き換えることを選択できます。

最後に、多くのクラウドインスタンスはKubernetesおよびOpenShiftクラスターの一部になり、スワップメモリ​​を処理するときに課題があります。コンテナのメモリアカウンティングを破棄するため、スワップメモリ​​の適切な処理に関して長期にわたるGitHubの問題があります。回避策はありますが、これらのシステムでは通常、スワップメモリ​​がスキップされます。

スワップを使用したクラウドインスタンスのデプロイ

スワップメモリ​​のプロビジョニングがアプリケーションにメリットをもたらすと判断した場合、cloud-initを使用すると、最初の起動時にmountsを使用してスワップメモリ​​をプロビジョニングできます。 モジュール。既存のcloud-configユーザーデータに数行追加するだけです:

swap:
    filename: /swapfile
    size: auto
    maxsize: 4294967296

この構成は、cloud-initに/swapfileにスワップファイルを作成するように指示します 4GB以下の自動サイズで。自動スワップサイジングの公式は、cloud-initのソースコードにあります:

formulas = [
    # < 1G: swap = double memory
    (1 * GB, lambda x: x * 2),
    # < 2G: swap = 2G
    (2 * GB, lambda x: 2 * GB),
    # < 4G: swap = memory
    (4 * GB, lambda x: x),
    # < 16G: 4G
    (16 * GB, lambda x: 4 * GB),
    # < 64G: 1/2 M up to max
    (64 * GB, lambda x: x / 2),
]

Red Hatから推奨されるスワップサイズは少し異なります:

  • 2GB以下のシステムRAM :2x RAM
  • 2GB以上から8GB :1x RAM
  • 8GB以上から64GB :最小4 GB
  • 64GB以上 :最小4 GB

size:を使用して、スワップメモリ​​(バイト単位)を手動で指定できます。 クラウド設定のパラメータ

swap:
    filename: /swapfile
    size: 2147483648  # 2 GiB

既存のクラウドインスタンスでのスワップのプロビジョニング

既存のインスタンスの場合、スワップメモリ​​を有効にするための最も簡単な方法はスワップファイルです。この例では、2GBのスワップファイルを/swapfileに配置します :


# BTRFS only #################################################################
# We must disable copy-on-write updates for swap files on btrfs file systems.
# The 'swapon' step fails if you skip these steps.
truncate -s 0 /swapfile
chattr +C /swapfile
# BTRFS only #################################################################

# A 2 GiB swap file.
dd if=/dev/zero of=/swapfile bs=1MiB count=2048

# Set the correct permissions on the swap file.
chmod 0600 /swapfile

# Format the swapfile.
mkswap /swapfile

# Enable the swapfile.
swapon /swapfile

# Add it to /etc/fstab to enable it after reboot.
echo "/swapfile none swap defaults 0 0" >> /etc/fstab

スワップメモリ​​の準備ができているかどうかを確認します:

$ cat /proc/swaps
Filename        Type    Size      Used    Priority
/swapfile       file    2097148   0       -2

[無料のオンラインコース:Red HatEnterpriseLinuxの技術概要。 ]

まとめ

スワップメモリ​​には、2つの有益な利点があります。

  • システムRAMの使用量が危険なレベルまで増加した場合の安全クッション
  • システムRAMの貴重なスペースを使用しているめったに使用されないメモリページ用の駐車場

ディスクへのメモリページングは​​システムメモリに比べて非常に遅いため、この安全クッションにはパフォーマンスの低下が伴います。

クラウド展開では、スワップメモリ​​が展開されることはめったにありませんが、スワップにはまだ利点があります。スワップをデプロイすることを選択すると、アプリケーションが誤動作した場合の安全性が確保されますが、メモリ消費の問題が解決されるまで、アプリケーションのパフォーマンスが低下する可能性があります。スワップをスキップするとクッションが削除されますが、誤動作しているアプリケーションがすぐに停止します。クラウド管理者は、これらの状況に対処するための計画を立てる必要があります。

幸い、cloud-initはクラウドインスタンスの大部分に表示され、数行のYAMLでスワップファイルを作成できます。スワップメモリ​​は、導入後にシンプルなシェルコマンドまたはスクリプトを使用して簡単に構成することもできます。

スワップメモリ​​を導入する場合でも、導入しない場合でも、最悪の事態が発生したときに計画を立ててください。システムを適切に監視し、システムが提供するアプリケーションの全体像を把握します。


Linux
  1. Linux –緊急時にのみスワップスペースを使用する方法は?

  2. Linux – Linuxのハイメモリとローメモリとは何ですか?

  3. Linuxクラウドサーバーのディスク容量不足のトラブルシューティング

  1. 安定性のためのクラウドサーバーの設計と構築

  2. メモリの監視と管理

  3. Windowsクラウドサーバーのディスク容量不足のトラブルシューティング

  1. クラウドサーバーのスペースを交換する

  2. UNIX / Linux:dd、mkswap、および swapon を使用してスワップ領域を追加する 2 つの方法

  3. Linux上のOracle Databaseに追加するスワップ領域の量