메모리 사용량이 많지만 사용중인 프로세스가 없습니다.


17

나는 실행 free -mVM 하이퍼 V에서 실행중인 데비안에 :

             total       used       free     shared    buffers     cached
Mem:         10017       9475        541        147         34        909
-/+ buffers/cache:       8531       1485
Swap:         1905          0       1905

따라서 10GB의 메모리 중 8.5GB가 사용 중이며 1500MB 만 사용 가능합니다 (캐시 제외).

그러나 나는 메모리를 사용하는 것을 찾는 데 어려움을 겪고 있습니다. ps aux | awk '{sum+=$6} END {print sum / 1024}'RSS 사용률을 합산해야하는 의 출력 은 다음과 같습니다.

1005.2

즉, 내 프로세스는 1GB의 메모리 만 사용하지만 시스템 전체 (캐시 제외)는 8.5GB를 사용합니다.

다른 7.5GB를 사용할 수있는 것은 무엇입니까?

추신 : 사용 된 mem 1200 (무료 mem = 8.8GB)을 보여주는 비슷한 구성의 다른 서버가 있으며 ps의 RSS 사용량 합계는 900이며 이는 내가 기대하는 것에 더 가깝습니다 ...


편집하다

cat /proc/meminfo 머신 1 (메모리 부족) :

MemTotal:       10257656 kB
MemFree:          395840 kB
MemAvailable:    1428508 kB
Buffers:          162640 kB
Cached:          1173040 kB
SwapCached:          176 kB
Active:          1810200 kB
Inactive:         476668 kB
Active(anon):     942816 kB
Inactive(anon):   176184 kB
Active(file):     867384 kB
Inactive(file):   300484 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1951740 kB
SwapFree:        1951528 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        951016 kB
Mapped:           224388 kB
Shmem:            167820 kB
Slab:              86464 kB
SReclaimable:      67488 kB
SUnreclaim:        18976 kB
KernelStack:        6736 kB
PageTables:        13728 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7080568 kB
Committed_AS:    1893156 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62284 kB
VmallocChunk:   34359672552 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67520 kB
DirectMap2M:    10418176 kB

cat /proc/meminfo 머신 2 (정상 메모리 사용량) :

MemTotal:       12326128 kB
MemFree:         8895188 kB
MemAvailable:   10947592 kB
Buffers:          191548 kB
Cached:          2188088 kB
SwapCached:            0 kB
Active:          2890128 kB
Inactive:         350360 kB
Active(anon):    1018116 kB
Inactive(anon):    33320 kB
Active(file):    1872012 kB
Inactive(file):   317040 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       3442684 kB
SwapFree:        3442684 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        860880 kB
Mapped:           204680 kB
Shmem:            190588 kB
Slab:              86812 kB
SReclaimable:      64556 kB
SUnreclaim:        22256 kB
KernelStack:       10576 kB
PageTables:        11924 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9605748 kB
Committed_AS:    1753476 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62708 kB
VmallocChunk:   34359671804 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63424 kB
DirectMap2M:    12519424 kB

답변:


15

Hyper-V를 사용하고 있음을 이해하지만 개념은 비슷합니다. 아마도 이것은 당신을 올바른 길로 안내 할 것입니다.

하이퍼 바이저가 메모리를 최적화하는 데 사용하는 기술인 가상 메모리 벌룬으로 인해 문제가 발생했을 수 있습니다. 설명을 보려면 이 링크를 참조하십시오

vSphere에서 VM과 동일한 증상을 관찰했습니다. 아무 것도 실행하지 않는 4G 머신은 캐시에서 사용 된 30M을보고하지만 "-/ + buffers"라인에서 3G 이상을 "사용"했다고보고합니다.

다음은 VMWare 통계 명령의 샘플 출력입니다. 이것은 3G에 얼마나 가까운가 내 "사용 된"금액에 얼마나 잘 고정되어 있는지 보여줍니다.

vmware-toolbox-cmd stat balloon
3264 MB

제 경우에는 분명히 풍선 드라이버가 ~ 3G를 사용하고있었습니다.

Hyper-V에서 비슷한 명령으로 풍선 통계를 얻는 것이 확실하지 않지만 비슷한 결과를 얻을 것이라고 확신합니다.


고마워-당신은 확실히 뭔가에 있습니다. lsmod | grep hv_는 낮은 메모리 시스템에서는 hv_balloon을 표시하지만 다른 시스템에서는 표시하지 않습니다. 따라서 풍선 모듈은 다른 시스템이 아닌 다른 시스템에로드됩니다. 그리고이 동작은 이 설명 과 매우 비슷 합니다 .
assylias

vmware-toolbox-cmdHyper V에 해당하는 것이 무엇인지 확실하지 않습니다 .
assylias

@assylias 알고 있습니다. 죄송합니다. 나는이 답변을 쓰는 ​​동안 내 자신을 보았고 비어있게되었다. 그러나 많은 양의 메모리를 빠르게 할당하는 프로그램을 작성하면 하이퍼 바이저가 VM에 리소스가 필요하다는 것을 확신시킬 수 있습니다. 디스크 캐시 제거 테스트 사례와 유사하지만 근본 원인이 다릅니다.
Matt

이 문제를 해결하기 위해 Hyper-V에서 동적 램 기능을 설정 해제 할 수 있습니다.
Ashish Negi

나는 여기서 내가 두려워하는 해결책을 보지 못한다.
Jamie Hutber

1

/server/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free

짧은 대답 : 커널은 파일 캐싱과 같은 다양한 작업에 버퍼 / 캐시 메모리를 사용합니다. 이 메모리는 필요한 경우 응용 프로그램에서 사용할 수 있으므로 944MB를 사용했다고 말하는 것이 맞습니다.


링크에 따르면, 944메가바이트 캐시의 양입니다
assylias은

2
아니요, 944MB는 실제로 응용 프로그램에서 사용중인 RAM의 양이며 다른 응용 프로그램에서는 사용할 수 없습니다. "(대부분의 최신 OS와 마찬가지로) Linux는 항상 캐싱을 위해 사용 가능한 RAM을 사용하려고 시도하므로 Mem : free는 거의 항상 매우 낮습니다. 따라서-/ + buffers / cache : 행이 표시됩니다. 캐시를 무시할 때 사용 가능한 메모리 양. 메모리가 부족하면 캐시가 자동으로 해제되므로 실제로 중요하지 않습니다. "
vik

예와 - / + 버퍼 / 캐시 쇼 1.5GB 무료 MEM ...
assylias

-/ + 버퍼에서 사용 가능한 1485 캐시는 시스템의 응용 프로그램에 사용 가능한 메모리 양이 아님을 이해하십시오. 실제로 응용 프로그램에서 사용할 수있는 메모리 양은 다음과 같습니다. (10017-(9475-8531)) = 9073. 이것이 합리적입니까?
vik

나는 당신이 틀렸다고 생각합니다 : 두 번째 줄은 캐시 및 버퍼를 제외하고 응용 프로그램의 실제 메모리 사용률입니다 (링크가 말한 것입니다 ...).
assylias
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.