スワップを完全に無効にする方法は?

スワップを完全に無効にする方法は?

私はDebian sidを使用しており、ハードディスクはext4でフォーマットされており、Linux 3.1で実行されています。

以前のLinuxバージョン(おそらく3.0より前)では、メモリが不足していてスワッピングが有効になっていないと、プログラムがクラッシュしたことがよくあります。これは私の環境に最適です。簡単なウェブ検索が必要で、重要な作業は必要ありません。つまり、メモリが多すぎる悪いウェブサイトを誤って見つけた場合、端末が利用できなくなるのではなく、衝突が発生する可能性があります。

ただし、現在の設定ではI / Oスループットが高く、コンピュータはバックグラウンドで機能しません。 iotop は kswapd0 を犯人として表示します。これはスワッピングによるものです。これを使用してswapon -s有効なスワップを識別した後、swapoff -aすべてのスワップを無効にし、swapon -sすべてのスワップが無効になっていることを再確認しました。

その後、もう一度メモリ使用量を最大化してみました。ああ、私が期待していた行動は起こりませんでした。代わりに、kswapd0 は RAM スワップを試行し続けますが、スワップ領域がないため失敗します。決してあきらめないので、私のコンピュータは永続的なI / O停止状態に陥り、これは私のディスク状態には悪いです。

私が何かを間違えようとしているのでしょうかswapoff -a?以前(おそらく3.0時代以前)と動作が異なるのはなぜですか?

答え1

スワップを無効にすると、目的の効果は表示されません。それでも劇的なI / Oスループットが得られますが、ダーティページではなくクリーンページになります。

スワッピングがないと、システムはクリーン(未修正)ページのキャッシュをゼロに近づけて圧縮します。これは、これらのページが物理メモリから削除できる唯一のページであるためです。ダーティページ(修正済み)をスワップ領域に書き込むことで、メモリからダーティページのみを削除でき、スワップ領域がないとダーティページを削除できません。

物理メモリが不足すると、各プロセスは古いプロセスコードページを削除するため、ディスクからそのコードページをロードする必要があります。その結果、スイッチングサブシステムの重大なスラッシングと過度の作業が発生します。

これは非常に重要な原則の特別なケースです。オプションを減らしても、うまく設計されたシステムをよりよく実行することはできません。 Linuxはよく設計されたシステムです。スワップを削除するとオプションが少なくなるため、パフォーマンスが悪くなることは驚くべきことではありません。

答え2

スワップをオフにするよりも優れたソリューション(メモリー不足時にほとんどのランダムプロセスが終了する)は、ネットワークからデータを取得するプロセスに対してプロセス固有のデータセグメント制限を設定することです。これにより、システム全体が利用できなくなるのではなく、ランアウェイブラウザが制限に達して死にます。はい、シェルでは

(ulimit -d 400000; firefox) &

-d の後の数字はキロバイト単位です。ブラウジング習慣に最適な値を選択するには、システムを実験する必要があります。かっこによってサブシェルが生成されます。 ulimit コマンドは、そのシェルとそのサブシェルにのみ影響し、親シェルからの影響を分離します。

答え3

スワップが使用されないようにするには、起動時にスワップが追加されないようにすることをお勧めします。システムに応じてswapブートサービスを無効にするか/etc/fstab

電話を切る限り、次のstop()機能は手がかりを提供する/etc/init.d/swapことができます。

stop()
{
       ebegin "Deactivating swap devices"

       # Try to unmount all tmpfs filesystems not in use, else a deadlock may
       # occure. As $RC_SVCDIR may also be tmpfs we cd to it to lock it
       cd "$RC_SVCDIR"
       umount -a -t tmpfs 2>/dev/null

       case "$RC_UNAME" in
               NetBSD|OpenBSD) swapctl -U -t noblk >/dev/null;;
               *)              swapoff -a >/dev/null;;
       esac
       eend 0
}

についての部分に注意してください。二重ロック。自分umount -a -t tmpfsでやってみることもできます今後交換を閉じます。


編集する:

おそらくsysctl設定を編集して目標を達成することもできます(参照:この問題)。

答え4

私のシステム(debian sid 2016-11-15)で次のことを行いました。

  1. 今スワップを無効にします。

    swapoff -a
    
  2. スワップパーティションがある行にコメントを追加します。/etc/fstab(不要な場合があります。手順3のみが機能し、手順2は機能しない可能性があります。)

    #### #UUID=c6ddbc95-3bb5-49e1-ab25-b1c505e5360c none            swap    sw              0       0
    
  3. systemdでスワップインストールを無効にします(ユニット名にバックスラッシュ文字が含まれている場合は、ユニット名を引用符で囲みます)。

    systemctl --type swap
    systemctl stop "dev-\x2da821.swap"
    systemctl mask "dev-\x2da821.swap"
    

これがトリックを行うようです。

関連情報