ラップトップを再起動すると、すべてが驚くほど実行され、メモリ使用量は最大で40%(8GBのうち)になります。ただし、時間の経過とともに(使用量の約1日)、メモリ使用量は90%以上になり、システムはスワッピングを開始します。
たった今、 free -mh
はこれを返します:
total used free shared buff/cache available
Mem: 7,7G 1,3G 141M 223M 6,3G 246M
Swap: 7,5G 530M 6,9G
プロセスで必要な場合は、バフ/キャッシュメモリを自由に再割り当てできると想定していましたが、ほとんど使用できないようです。
cat /proc/meminfo
:
MemTotal: 8055268 kB
MemFree: 145184 kB
MemAvailable: 247984 kB
Buffers: 49092 kB
Cached: 423724 kB
SwapCached: 38652 kB
Active: 881184 kB
Inactive: 791552 kB
Active(anon): 708420 kB
Inactive(anon): 725564 kB
Active(file): 172764 kB
Inactive(file): 65988 kB
Unevictable: 252 kB
Mlocked: 252 kB
SwapTotal: 7812092 kB
SwapFree: 7267624 kB
Dirty: 352 kB
Writeback: 0 kB
AnonPages: 1195320 kB
Mapped: 235860 kB
Shmem: 234068 kB
Slab: 6117796 kB
SReclaimable: 167260 kB
SUnreclaim: 5950536 kB
KernelStack: 10352 kB
PageTables: 30312 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 11839724 kB
Committed_AS: 6410728 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 104448 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 1361472 kB
DirectMap2M: 5859328 kB
DirectMap1G: 1048576 kB
これらの値はfree
のバフ/キャッシュの使用法と多くの相関があるため、特に興味深いものでした。
SReclaimable: 167260 kB
SUnreclaim: 5950536 kB
Slab: 6117796 kB
次にどこを見ればいいですか?スラブとは何ですか?メモリ使用量を減らす方法はありますか?
実際にRAM=を使用しているかどうかをtop
で確認するか、メモリ使用量で並べ替えるか、システムモニターでメモリ使用量を確認する必要があります。
Linuxはディスクキャッシングのために未使用のメモリを借ります。これにより、メモリが不足しているように見えますが、そうではありません。詳細については、このWebページを確認してください: https://www.linuxatemyram.com/
投稿された例では、実際には約6.5Gbの未使用メモリがあります。スワップ量が非常に少ない(540Mb)こともわかります。
ここで説明 としてキャッシュを解放すると、free
は利用可能なフィールドに空きメモリを表示します。
ページキャッシュを解放するには:
# echo 1 > /proc/sys/vm/drop_caches
エントリとiノードを解放するには:
# echo 2 > /proc/sys/vm/drop_caches
ページキャッシュ、エントリ、およびiノードを解放するには:
# echo 3 > /proc/sys/vm/drop_caches
または、このコマンドで:
free && sync && echo 3 > /proc/sys/vm/drop_caches && free
スラブについて:
スラブ、SReclaimable、SUnreclaim
カーネルは実行中に多くの繰り返しを行います。ファイルの特定のiノードを要求するような一部のオブジェクトは、1日に1000回実行される場合があります。このような場合は、クイックリファレンスリストまたはキャッシュに保存することをお勧めします。スラブは、最も頻繁に発生するアクティビティを最適化するためのカーネルオブジェクトのキャッシュです。
Slabフィールドは、SReclaimableとSUnreclaimの合計です。
slabtop
を使用して、Slab SUnreclaimメモリ量を使用しているものをトラブルシューティングしてみてください。
上記はrootとして実行するためのものです。
したがって、多少過剰に設計された後 トラブルシューティングxflux がkmalloc-4096
スラブはゆっくりとしかし着実に成長します。その理由を調べて、このアンサーを更新します。