時間が経つにつれて、メモリがいっぱいになり、「バッファ/キャッシュ」の使用量が高く、「使用可能な」メモリが低くなります。

時間が経つにつれて、メモリがいっぱいになり、「バッファ/キャッシュ」の使用量が高く、「使用可能な」メモリが低くなります。

ノートブックを再起動するたびに、すべてが驚くほど実行され、メモリ使用量は最大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

ちなみに、最近、topSLABが大きくなるバッチモード(-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の塗りつぶしをトリガします。

関連情報