ノートブックを再起動するたびに、すべてが驚くほど実行され、メモリ使用量は最大40%(8 GBを超える)に達します。しかし、時間が経つほど(約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
次はどこで見ることができますか?スラブとは何ですか?メモリ使用量を減らす方法はありますか?
答え1
top
実際にRAMを使用していることを確認するか、メモリ使用量で並べ替えるか、システムモニタでメモリ使用量を確認する必要があります。
Linux は、ディスクキャッシュに使用されていないメモリを借りています。これはメモリが不足しているように見えますが、そうではありません。詳しくはこのページをご覧ください。https://www.linuxatemyram.com/
公開された例では、実際には約6.5 GBの未使用メモリがあります。また、スワップボリュームが非常に低いことがわかります(540Mb)。
次のようにキャッシュを空にすることができます。ここで説明されていますこれにより、使用可能なメモリがfree
使用可能フィールドに表示されます。
ページキャッシュを空にします。
# echo 1 > /proc/sys/vm/drop_caches
dentry と inode を解放します。
# echo 2 > /proc/sys/vm/drop_caches
ページキャッシュ、ディレクトリエントリ、およびinodeを解放します。
# echo 3 > /proc/sys/vm/drop_caches
または、次のコマンドを使用します。
free && sync && echo 3 > /proc/sys/vm/drop_caches && free
Slabについて:
Slab、SReclaimable、およびSUnreclaim
カーネルは、操作中に多数の反復操作を実行します。ファイル内の特定のinodeを要求するなど、一部のオブジェクトは1日に数千回実行できます。このような場合は、クイックリファレンスリストまたはキャッシュに保存することをお勧めします。スラブは、最も頻繁に発生するアクティビティに最適化されたカーネルオブジェクトのキャッシュです。
Slab フィールドは SReclaimable と SUnreclaim の合計です。
Slab SUnreclaimで使用されているメモリ量に関する問題を解決してくださいslabtop
。
上記はrootとして実行するように設計されています。
答え2
だから、過度のデザインをした後トラブルシューティング私が見つけた流量kmalloc-4096
プレートが遅いですが、着実に成長させるようです。理由を調べて、この回答を更新します。
答え3
ちなみに、最近、top
SLABが大きくなるバッチモード(-bオプション)で実行されているシステムに遭遇しました。たとえば、
# cat /proc/slabinfo | grep proc
proc_inode_cache 5567 5868 440 9 1 : tunables 0 0 0 : slabdata 652 652 0
topを実行せずにシステムを起動すると、proc SLABメモリ消費量が大幅に削減されます。
# cat /proc/slabinfo | grep proc
proc_inode_cache 564 846 440 9 1 : tunables 0 0 0 : slabdata 94 94 0
top
これは、ツールが/ procを介して各プロセスの統計を取得するためです。これは、最後にアクセスしたprocファイルのinodeでproc SLABの塗りつぶしをトリガします。