開いているタブがほとんどない一般的なナビゲーションやgimpによる画像処理中でも、メモリ割り当てエラー(dmesgで報告されている)によってアプリが頻繁にクラッシュします。このデバイスには16GBのRAMがあります。次のメモリ割り当てをテストしようとしています。この問題:
$ stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1
stress-ng: info: [28129] defaulting to a 86400 second (1 day, 0.00 secs) run per stressor
stress-ng: info: [28129] dispatching hogs: 1 vm
stress-ng: error: [28148] stress-ng-vm: gave up trying to mmap, no available memory
stress-ng: info: [28129] successful run completed in 10.02s
awk行で0.9の代わりに0.55を使用すると、「利用可能なメモリなし」というメッセージは返されませんが、0.55より大きい値はすべてエラーになります。利用可能なメモリの0.55以上を割り当てることができないのはなぜですか?
これは/proc/meminfoの内容です
MemTotal: 15919800 kB
MemFree: 5488312 kB
MemAvailable: 12100632 kB
Buffers: 716568 kB
Cached: 6156352 kB
SwapCached: 0 kB
Active: 5465468 kB
Inactive: 4214576 kB
Active(anon): 2985580 kB
Inactive(anon): 117944 kB
Active(file): 2479888 kB
Inactive(file): 4096632 kB
Unevictable: 176576 kB
Mlocked: 2476 kB
SwapTotal: 999420 kB
SwapFree: 999420 kB
Dirty: 156 kB
Writeback: 0 kB
AnonPages: 2983852 kB
Mapped: 713212 kB
Shmem: 294288 kB
KReclaimable: 380216 kB
Slab: 448228 kB
SReclaimable: 380216 kB
SUnreclaim: 68012 kB
KernelStack: 14432 kB
PageTables: 55080 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 16760020 kB
Committed_AS: 9543584 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 31412 kB
VmallocChunk: 0 kB
Percpu: 2848 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 274432 kB
DirectMap2M: 9728000 kB
DirectMap1G: 6291456 kB
私が使いすぎる設定は次のとおりです。
$ cat /proc/sys/vm/overcommit_memory
2
$ cat /proc/sys/vm/overcommit_ratio
99
$ cat /proc/sys/vm/swappiness
10
ベストアンサー1
あなたは使用しています厳格な超過使用会計したがって、プロセスが使用可能なメモリよりも多くのメモリをマッピングすることはできません。このCommitted_AS
行は、9543584kiBが現在割り当てられていることを示し、この行は制限がCommitLimit
16760020kiBであり、割り当て可能なスペースが7216436kiBであることを示しています。これは使用可能なメモリの59.6%であるため、一部のオーバーヘッドがあると、stress-ng
使用可能なメモリの55%以上を割り当てることはできません。メモリ仮想マシンにワーカースレッドを提供することは驚くべきことではありません。
使用可能なメモリをさらに割り当てるには、stress-ng
オーバーコミットを許可する必要があります。
sudo sysctl vm.overcommit_memory=0
または交換金額を増やして約定限度を上げてください。