시간이 지남에 따라 메모리가 가득 차고 "버퍼/캐시" 사용량이 높으며 "사용 가능한" 메모리가 낮습니다.

시간이 지남에 따라 메모리가 가득 차고 "버퍼/캐시" 사용량이 높으며 "사용 가능한" 메모리가 낮습니다.

노트북을 다시 시작할 때마다 모든 것이 놀라울 정도로 실행되고 메모리 사용량은 최대 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

다음은 어디서 볼 수 있나요? 슬래브란 무엇이며 메모리 사용량을 줄이는 방법이 있습니까?

답변1

top실제로 RAM을 사용하고 있는 것이 있는지 확인하거나, 메모리 사용량별로 정렬하거나, 시스템 모니터에서 메모리 사용량을 확인 해야 합니다 .

Linux는 디스크 캐싱을 위해 사용되지 않은 메모리를 빌려옵니다. 이렇게 하면 메모리가 부족한 것처럼 보이지만 그렇지 않습니다. 자세한 지침은 이 페이지를 확인하세요.https://www.linuxatemyram.com/

게시된 예에서는 실제로 약 6.5GB의 사용되지 않은 메모리가 있습니다. 또한 스왑 볼륨이 매우 낮은 것을 볼 수 있습니다(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를 요청하는 것과 같은 일부 개체는 하루에 수천 번 실행될 수 있습니다. 이런 경우에는 빠른 참조 목록이나 캐시에 저장하는 것이 좋습니다. 슬랩은 가장 자주 발생하는 활동에 최적화된 커널 개체의 캐시입니다.

Slab 필드는 SReclaimable과 SUnreclaim의 합계입니다.

Slab SUnreclaim 에서 사용 중인 메모리 양과 관련된 문제를 해결해 보세요 slabtop.

위의 내용은 루트로 실행되도록 고안되었습니다.

답변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 채우기를 트리거합니다.

관련 정보