
저는 free -m
Hyper-V에서 실행되는 Debian VM에서 이것을 실행하고 있습니다:
total used free shared buffers cached
Mem: 10017 9475 541 147 34 909
-/+ buffers/cache: 8531 1485
Swap: 1905 0 1905
따라서 내 10GB 메모리 중 8.5GB가 사용되고 있으며 1,500MB만 사용할 수 있습니다(캐시 제외).
하지만 메모리를 사용하는 것이 무엇인지 찾는 데 문제가 있습니다. ps aux | awk '{sum+=$6} END {print sum / 1024}'
(RSS 활용도를 합산해야 함) 의 출력은 다음과 같습니다.
1005.2
즉, 내 프로세스는 1GB의 메모리만 사용하지만 전체 시스템(캐시 제외)은 8.5GB를 사용합니다.
남은 7.5GB는 어떤 용도로 사용할 수 있나요?
ps: 사용된 메모리를 1200(사용 가능한 메모리 = 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
답변1
Hyper-V를 사용하고 계신 것으로 알고 있지만 개념은 비슷합니다. 아마도 이것이 당신을 올바른 길로 인도할 것입니다.
문제는 하이퍼바이저가 메모리를 최적화하기 위해 사용하는 기술인 가상 메모리 팽창으로 인해 발생할 수 있습니다. 바라보다이 링크에 대한 설명
vSphere의 가상 머신에서 귀하와 똑같은 증상이 관찰되고 있습니다. 아무것도 실행하지 않는 4G 시스템은 30M의 캐시 사용량을 보고하지만 "-/+ 버퍼" 라인에서 3G보다 더 많은 것을 "사용"합니다.
다음은 VMWare 통계 명령의 샘플 출력입니다. 이는 내 "사용된" 금액이 3G에 얼마나 가까운지를 보여줍니다.
vmware-toolbox-cmd stat balloon
3264 MB
내 경우에는 풍선 운전사가 ~3G를 사용하고 있다는 것이 분명했습니다.
풍선 통계를 얻기 위해 Hyper-V에 유사한 명령이 무엇인지 잘 모르겠지만 비슷한 결과를 얻을 것이라고 확신합니다.
답변2
https://serverfault.com/questions/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free
짧은 대답: 커널은 버퍼/캐시를 사용하여 파일 캐싱과 같은 다양한 작업을 수행합니다. 이 메모리는 필요한 경우 애플리케이션에 사용할 수 있으므로 944MB가 사용되고 있다는 설명이 정확합니다.