Redhat 7.6を実行する4-CPU/72コア、4TBメモリシステムがあります。
/proc/cmdline
示す:
BOOT_IMAGE=/vmlinuz-3.10.0-957.5.1.el7.x86_64 ... ro crashkernel=auto rd.lvm.lv=vg00/lswap nomodeset rhgb quiet LANG=en_US.UTF-8
ジョブを実行すると、このマシンに1TB以上のメモリを割り当てることはできません。割り当てられたメモリを使用してこれを再現できましたstress-ng
。たとえば、現在の状態は次のとおりです。
total used free shared buff/cache available
Mem: 3.9T 279G 2.2T 34G 1.4T 3.6T
Swap: 127G 849M 127G
1TB以上を使用するためにストレスngを使用してメモリを割り当てようとすると、エラーが発生します。このコマンドはうまく動作します。
stress-ng -m 60 --vm-bytes 700G -t 180s
メモリが最大980GB程度になることを確認しました。しかし、もう少し割り当てると、mmapは失敗します。
stress-ng -m 60 --vm-bytes 800G -t 180s
stress-ng: info: [90100] dispatching hogs: 60 vm
stress-ng: error: [90457] stress-ng-vm: gave up trying to mmap, no available memory
そして、free
ディスプレイ使用量は最大1TBに達します。使用量は1TBを超えていません。
ユーザーメモリを1.0TBに制限できるカーネル構成やその他の要素を考慮する必要がありますか?時間の経過とともに、このbuff/cache
値は3.0Tに増加し、決して解放されません。おそらく、カーネルがユーザープロセスがその値に入ることを許可していないからです。