RAMが完全にいっぱいになったときにのみシステムにスワップを使用させるにはどうすればよいですか?

RAMが完全にいっぱいになったときにのみシステムにスワップを使用させるにはどうすればよいですか?

これまでにvm.swappiness設定すると、0RAMが完全にいっぱいになったときにのみシステムが交換されるという意味でした。

$ cat /etc/sysctl.d/99-sysctl.conf
kernel.sysrq = 1
vm.swappiness=0
$ sysctl vm.swappiness
vm.swappiness = 0

ただし、最近この設定を使用すると、スワッピングが消去されてから数秒後でもスワッピングが可能になりますsudo swapoff -a; sudo swapon -a。たとえば、数時間後

$ free -m
        total   used   free   shared  buff/cache  available
Mem:    32047   7914    325     1509       23807      22177
Swap:    1974   1974      0

したがって、22177MiBがありますavailable。からman free

書くことができる

スワップなしで新しいアプリケーションを起動するために使用できるメモリ量を見積もります。

しかし、私のシステムは1974MiBのスワップスペースを使用し、遅くなるなど、まだ多くのスワップを実行しています。

vm.swappinessに設定してみましたが、1同様の結果が出ました。また、最新のLTS 4.19.17-1、4.19.16-1-lts、4.19.15-1-lts、その他多くのLTSバージョンとメインライン4.18.16.arch1-1を含むさまざまなカーネルを試してみました。方法 不要なシステム交換を防止しますか?

確かに最新バージョンのカーネルでこれを設定すると、vm.swappiness = 0「利用可能なページとファイルサポートページの数がお住まいの地域の最高水位表示より少なくなるまでスワップを開始しない」という意味です。この「ハイウォーターマーク」とは何かはわからないけど、空きメモリーがたくさんあります!その他ページ提案OOMキラーこれが発生すると呼び出されます(交換自体ではありません)。 RAMなしでスワップをブロックし、OOMシャットダウンが発生するのを防ぎますか(RAMとスワップの両方がいっぱいになっていない場合)。

関連情報