今日、私は次のことに気付きました:
ご覧のとおり、RAM はほぼ半分空きで、スワップ領域の使用率は非常に高くなっています。教科書的な知識から、Linux OS は RAM を最大限に活用しようとし、RAM が不足すると、最も使用頻度の低いページの一部を RAM からスワップ領域に移動すると考えていました。
私の理論的な知識が間違っている場合は、誰か私に説明し、Linux の世界で実際にどのように機能するかを説明してください。
答え1
メモリが残っている場合でもカーネルがスワップを使用するのは事実ですが、メモリの 3 分の 2 以上を使用しているということは、これまでサーバのメモリが不足していた可能性があり、それがスワップを開始した理由である可能性があります。システムに十分な RAM があるかどうかを推測するには、sar レポートでスワップ使用量とメモリ使用量を相関させます。また、dmesg またはログをチェックして、サーバのメモリが実際に不足し、oom-killer が起動したかどうかを判断します。
答え2
Linux カーネルは、十分な空き RAM があってもメモリ ページをスワップ アウトし始めます。カスタム swappiness を設定することで、この動作を微調整できます。
http://en.wikipedia.org/wiki/スワッピネス
サーバーの場合、ワークロードに十分なメモリが常にある場合は、swappiness を 1 に設定することをお勧めします。ワークステーションの場合は、デフォルトの 60 を使用することをお勧めします。
# check the current value
cat /proc/sys/vm/swappiness
60
# swappiness = 1 (swap only if necessary)
echo 1 > /proc/sys/vm/swappiness
# or use sysctl
sysctl -w vm.swappiness=1
/etc/sysctl.confで設定を永続化するには、次のように設定します。
vm.swappiness=1
そしてリロードして
sysctl -w
答え3
残念ながら、一部のアプリケーションはスワップを直接ハンマーし、意図的に RAM をスキップします。Chrome (および一時期 Photoshop) がそうです。これらのアプリケーションをスワップしないようにする唯一の方法は、スワップ パーティションなしで実行することです。swappiness 0 でも、明示的に要求するため、アプリケーションはアクセスできるようになります。
ただし、上記のように swappiness を変更すると、他のすべてに有効になります。ただし、1 ではなく 10 ~ 20 の値をお勧めします。