web-dev-qa-db-ja.com

`vm.swappiness = 100`にもかかわらず、Mintシステムはフリーズしますが、未使用のスワップ

私のMint 18.1システムは、フリーズ時に100%のメモリ使用を示すウィジェットに従って、メモリ不足のために約10分間フリーズすることがよくあります。 SysRq + " スキニーエレファントの育成はかなり退屈です "の組み合わせは機能しません。

スワップ優先度を-1に設定してみましたが、フリーズは解決しません。

高負荷でもvm.swappiness=100を使用しても、RAMの95%以上が使用されている場合でも、スワップパーティションはほとんど使用されていません。スワップの使用を増やすと強制的にフリーズが解決します。もしそうなら、どうすればスワップをさらに強制的に使用できますか?

->free -m
              total        used        free      shared  buff/cache   available
Mem:          15874       12243         412        1255        3218        1724
Swap:         16207           5       16201

->swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-3             partition 16596476    6068    -1

enter image description here

私のシステム:

NAME="Linux Mint"
VERSION="18.1 (Sonya)"
8
OlehZiniak

ここには明らかに2つの問題があります。

REISUBシーケンスが機能しないのは、マジックSysRqがアクティブになっていないことが原因である可能性があります-チェックアウトしてください

cat /proc/sys/kernel/sysrq

# List of possible values in /proc/sys/kernel/sysrq:

#  0 - disable sysrq completely
#  1 - enable all functions of sysrq
#    >1 - bitmask of allowed sysrq functions (see below for detailed function description):
#      2 - enable control of console logging level
#      4 - enable control of keyboard (SAK, unraw)
#      8 - enable debugging dumps of processes etc.
#     16 - enable sync command
#     32 - enable remount read-only
#     64 - enable signalling of processes (term, kill, oom-kill)
#    128 - allow reboot/poweroff
#    256 - allow nicing of all RT tasks

クラシックREISUBの場合、4(R)+ 64(E、I)+ 16(S)+ 32(U)+ 128(B)= 244が必要です(効果はスキニーエレファントバージョンと同じですが、ニーモニックとしては、 BUSIERのスペルが逆です)。

システムのスワップについて:期待どおりに機能しています。この動作の原因は、大量のメモリが使用されていることです。つまり、95%が取得されている可能性があり、そして、次に何かelse新しいRAMを大量に要求し、その95%のほとんどをスワップに強制し、ずっと戦い続けています。

あなたができる最善のことはより多くのRAMをインストールすることです。それ以外の場合は、小さなプロセスを95%まで構築するか、大きなプロセスがさらに40-50%を消費するかを確認します。 topユーティリティが役立ちます。

派手なソリューションとして、システムを監視するいくつかのプロセスを使用して、見かけのスワップを増やし、小さな稚魚を「削減」することができます。大きな豚が実行されておらず、メモリフットプリントが大きすぎる場合は、大量のメモリを割り当てて解放し始めました。 -残りのすべてのメモリに64Mを加え、64Mの小さな稚魚をキャッシュに強制し、次に+ 128Mを続けて、割り当ての遅延が指定の時間しきい値を超えるか、大きな豚が始まるまで続けます。

この答え 本当にやりたいなら、良いスタートを切ることができます。

3
LSerni

簡単に言えば、スワップはあなたを助けません、この問題の最も効果的な解決策はメモリを拡張することですシステム環境を変更しない場合。

次に、今述べた質問に答えます。

1。 「vm.swappiness = 100」にもかかわらずメモリがスワップアウトしないのはなぜですか?

まず、Linuxでのswapの仕組みを知っておく必要があります。カーネルがメモリ不足を感じた場合、状況を緩和するためにメモリを再利用するには2つの方法があります。

  1. 匿名ページの交換
  2. キャッシュされたページを再利用する

そして 'vm.swappiness'は、カーネルがどの程度積極的にメモリページをスワップするかを制御します(より多くの匿名ページをスワップアウトするか、より多くのキャッシュページを再利用します)

それで、別の質問が来ます、カーネルはどの匿名ページが交換されるかをどのように決定するのですか?戦略は複雑です。カーネルのバージョンに応じて、コード here を参照できます。戦略を1文で要約し、最も非アクティブなページを交換します。カーネルがスワップできると考える非アクティブなページがない場合はどうなりますか?

これが、システムが思ったほど多くのメモリをスワップアウトしない理由です。

2。メモリスワップの強制は役立ちますか?

いいえ。メモリを強制的にスワップする一般的な方法はありません。カーネルがメモリを引き継ぎます。

3
Shellmode

システムがラップトップの場合、追加のfunctionキー(shiftキーのように機能する)でない限り、そのキーボードsysreqキーは機能しない可能性があります。が押されます。

アプリ(またはアプリのセット)が16 GBを超えるRAMを消費しているときは常に、膨らみの少ないアプリを見つけるのが通常最善です。

0
agc