Linux 커널 5.0.9에 메모리 누수가 있습니까?

Linux 커널 5.0.9에 메모리 누수가 있습니까?

아마도 다음과 같은 것Linux 메모리 사용량이 프로세스 합계보다 높습니다.그러나 사용된 메모리는 GB 단위의 RSS 프로세스 합계보다 낮기도 하고 높기도 했습니다.

uname -sr

Linux 5.0.9-...

cat /proc/meminfo

MemTotal:        8155920 kB
MemFree:          280200 kB
MemAvailable:     328152 kB
Buffers:             144 kB
Cached:           704380 kB
SwapCached:        15440 kB
Active:          2374160 kB
Inactive:        1195784 kB
Active(anon):    2259104 kB
Inactive(anon):  1026600 kB
Active(file):     115056 kB
Inactive(file):   169184 kB
Unevictable:      238012 kB
Mlocked:               0 kB
SwapTotal:       8388604 kB
SwapFree:        5908220 kB
Dirty:               168 kB
Writeback:             0 kB
AnonPages:       3097284 kB
Mapped:           255492 kB
Shmem:            420252 kB
KReclaimable:      81636 kB
Slab:             346972 kB
SReclaimable:      81636 kB
SUnreclaim:       265336 kB
KernelStack:       14720 kB
PageTables:        70776 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    12466564 kB
Committed_AS:    9429628 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
Percpu:             2112 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:     4764008 kB
DirectMap2M:     3614720 kB

모든 프로세스(출력에서 개별적으로 합산됨), slabinfo, buff/cache, swap에 대한 RSS 합계는 top100MB 이상 변경되지 않지만 사용 가능한 메모리는 GB만큼 증가합니다.뒤쪽에ffmpeg 시작... 과중한 장기 압축 작업에서 ffmpeg를 시작하면 모든 디스크 스래싱이 안정적으로 제거되고 매번 사용 가능한 메모리가 크게 늘어나는 것 같습니다(좋은 임시 솔루션이지만 장기적인 솔루션으로는 허용되지 않음). ffmpeg가 실행 중일 때 사용 가능한 메모리가 다운되고 디스크가 충돌하지만 사용 가능한 메모리는 GB 단위로 증가합니다. 이 동작은 ffmpeg가 실행 중일 때만 존재합니다. ffmpeg가 실행되고 있지 않으면 사용 가능한 메모리가 디스크 스래싱을 ​​유발하는 것에서 최대 수백 MB로 이동합니다. 시스템을 사용한 지난 두 달 동안 다른 어떤 프로그램도 같은 효과를 내지 못한 것 같습니다. 재미 있고 짜증나.

답변1

저는 주로 BSD 기반 시스템을 사용합니다. 하지만 내가 보기에 당신의 상황은 매우 유사해 보입니다. 귀하의 데이터가 "예상대로" 작동하는 것 같습니다. 메모리는 무한히 빠르기 때문에 스왑보다 낫습니다. 따라서 귀하의 시스템은 최선을 다하고 있습니다관리하다그 기억, 그리고오직애플리케이션이 아닌 시스템이 적합하다고 판단하는 대로 애플리케이션이 이를 사용할 수 있도록 허용합니다. IOW 귀하의 시스템소비하다해당 리소스를 다음과 같이 프록시할 수 있도록 메모리그것적절하다고 간주됩니다. 그 반대는 사실이 아닙니다.

이제 뭔가를 추가할 수 있습니다. 그렇지 않으면승인하다의. 너하다커널의 동작을 원하는 대로 변경하기 위해 커널을 "조정"하는 옵션이 있습니다. 하지만 솔직히 기분이 좋습니다.

화타이

답변2

Committed_AS그보다 크면 MemTotal페이지가 표시됩니다. 임계값에 도달하면 메모리 회수를 통해 일부 캐시가 삭제되고 일부 페이지가 디스크로 이동되는 등 유사한 활동이 수행됩니다.

이러한 재활용 동작이 마음에 들지 않으면 RAM을 더 추가하세요.

실제로 할당된 메모리를 추적하지 못하는 프로그램이나 커널의 "메모리 누수"는 심각한 상황입니다. 재활용 행위를 Valgrind 또는 LeakSanitizer와 같은 도구를 사용하여 발견한 누출과 혼동하지 마십시오.

관련 정보