web-dev-qa-db-ja.com

時間の経過とともにメモリがいっぱいになり、「バッファ/キャッシュ」の使用率が高く、「利用可能な」メモリが少ない

ラップトップを再起動すると、すべてが驚くほど実行され、メモリ使用量は最大で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

次にどこを見ればいいですか?スラブとは何ですか?メモリ使用量を減らす方法はありますか?

6
Max Hollmann

実際に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として実行するためのものです。

4
mazs

したがって、多少過剰に設計された後 トラブルシューティングxfluxkmalloc-4096スラブはゆっくりとしかし着実に成長します。その理由を調べて、このアンサーを更新します。

2
Max Hollmann