
나는 Linux 메모리 관리에 관한 기사를 읽었으며 여유 메모리, 사용 가능한 메모리, 스왑 영역 등과 같은 개념을 이해합니다(아마도 능숙하지 않을 수도 있음). 하지만 다음 명령으로 확인하면 :
cat /proc/meminfo; free -w; vmstat -s
내 이해를 보여주기 위해 정확한 숫자를 계산할 수는 없습니다.
예를 들어 "cat /proc/meminfo"는 다음을 표시합니다.
MemTotal: 8169968 kB
MemFree: 984124 kB
MemAvailable: 4231224 kB
Buffers: 171420 kB
Cached: 3272688 kB
SwapCached: 65604 kB
Active: 3415076 kB
Inactive: 3388312 kB
Active(anon): 2636088 kB
Inactive(anon): 789932 kB
Active(file): 778988 kB
Inactive(file): 2598380 kB
Unevictable: 64 kB
...
"free -w"는 다음을 보여줍니다:
total used free shared buffers cache available
Mem: 8169968 3566616 983864 66952 171420 3448068 4230964
Swap: 3903484 500620 3402864
"vmstat -s"가 표시됩니다.
8169968 K total memory
3566616 K used memory
3415476 K active memory
3388312 K inactive memory
983864 K free memory
171420 K buffer memory
3448068 K swap cache
3903484 K total swap
500620 K used swap
3402864 K free swap
9335996 non-nice user cpu ticks
...
내 질문은 다음과 같습니다.
1. 왜 "중고+사용가능=전체"가 아닌가요?
일부 기사에서는 "여유" 메모리가 어떤 것에도 사용되지 않는 반면 "여유" 메모리는 일부 버퍼에서 사용될 수 있지만 언제든지 프로그램에 할당될 수 있다고 말합니다. 내가 이해한 바에 따르면 이는 다음을 의미합니다.
합계 = 사용 가능 + 사용됨
하지만 내가 계산할 때 :
4231224 ("MemAvailable" in /proc/meminfo) + 3566616 ("used memory" in vmstat) = 7797840
전체(8169968K)와의 차이: 372128K(또는 363M) 미만
4230964 ("available" in free) + 3566616 ("used" in free) = 7797580
전체(8169968K)와의 차이: 372388K(또는 363M) 미만
그렇다면 왜 그 격차가 그렇게 큰 걸까요?
2. "무료 + 버퍼 + 캐시 = 사용 가능"이 아닌 이유는 무엇입니까?
일부 기사에 따르면 Linux는 버퍼와 캐시를 위해 일부 메모리를 사용할 수 있으므로 메모리의 이 부분은 "사용 가능"하지 않지만(아무 것도 사용하지 않으므로 즉시 프로그램에 할당할 수 있음) 여전히 "사용 가능"합니다(사용 중임에도 불구하고). 버퍼나 캐시에 있지만 언제든지 해제되어 프로그램에 할당될 수 있습니다. 하지만 내가 계산할 때 :
/proc/메모리 정보:
984124 (MemFree) + 171420 (Buffers) + 3272688 (Cached) = 4428232
"MemAvailable"(4231224)과의 차이점: 197008K(또는 192M) 이상
무료:
983864 (free) + 171420 (buffers) + 3448068 (cache) = 4603352
사용 가능(4230964)과의 차이: 372388K(또는 363M) 더보기
격차가 왜 그렇게 큰가요?
또한 이 질문과 이전 질문 모두에 "372388 K"라는 숫자가 나타납니다. 즉, "free" 명령에서는 다음과 같습니다.
total = available + used + 372388
total = free + buffers + cache - 372388
그렇다면 그것은 무엇입니까("372388 K" 메모리)?
3. "활성 + 비활성 + 유휴 = 전체"가 아닌 이유는 무엇입니까?
일부 기사에서는 "활성"이 최근에 액세스된 메모리라고 말하지만 "비활성"은 그렇지 않습니다. 내가 이해하는 한도에서는:
활성(애플리케이션) + 비활성(애플리케이션) = 애플리케이션에서 사용하는 메모리 활성(버퍼) + 비활성(버퍼) = 버퍼에서 사용하는 메모리...
따라서 "활성 + 비활성 = 사용된 총 메모리" 및 "사용된 총 메모리 + 사용 가능 = 총 메모리"입니다. 하지만 내가 계산할 때 :
/proc/메모리 정보:
3415076 (Active) + 3388312 (Inactive) + 984124 (MemFree) = 7787512
전체(8169968K)와의 차이: 382456K(또는 373M) 미만
가상 머신 통계:
3415476 (active) + 3388312 (inactive) + 983864 (free) = 7787652
총 개수(8169968K)와의 차이: 382316K(또는 373M) 미만
내 이해가 맞나요? 비슷한 방정식이 또 있나요?
내가 이 질문을 하는 이유는 메모리를 계산하는 응용 프로그램을 작성하기 위한 것이 아니라 내가 이해한 내용을 확인하고 내가 놓친 부분을 찾기 위한 것입니다.
예를 들어, 내 월급이 $1,000인데 은행 계좌에 $800만 있다고 합니다. 어떤 기사에서는 그 이유가 세금 때문이라고 합니다. 12% 세금을 계산했는데 아직 80위안이 부족해서 다시 물어보니 드디어 사회보장의 개념을 이해하게 되었습니다.
이러한 Linux 메모리 통계의 출력은 "사용 가능한 스왑 + 사용된 스왑 = 총 스왑"의 정확한 계산 외에는 출력에서 어떤 방정식도 얻을 수 없는 수준입니다. 이로 인해 Linux 메모리 관리에 대한 이해가 자신감이 없게 되었습니다. 특히 간격이 373MB에 달할 때 뭔가 빠진 것 같습니다.
답변1
- "사용 가능 + 사용 가능 = 총계"가 아닌 이유는 무엇입니까?
여유 메모리는 사용된 메모리와 여유 메모리의 하위 집합이기 때문에 시스템을 강제로 교체하지 않고 사용할 수 있는 메모리 양입니다.즉여유 메모리와 현재 캐싱에 사용되는 메모리를 즉시 제거할 수 있습니다. 바라보다배포판에서 이식 가능한 사용 가능한 메모리 양을 얻는 방법은 무엇입니까?계산에 대한 세부정보입니다.
- "여유 + 버퍼 + 캐시 = 사용 가능"이 아닌 이유는 무엇입니까?
버퍼와 캐시에 사용되는 일부 메모리는 사용할 수 없기 때문에 즉시 제거할 수 없으며, 이를 사용하면 시스템이 워터마크 위로 밀려나게 됩니다.
- "활성 + 비활성 + 유휴 = 총계"가 아닌 이유는 무엇입니까?
활성 및 비활성 값은 해당 LRU를 반영하고 페이지 테이블과 같은 일부 페이지는 추적되지 않거나 PageTables
제거할 수 없습니다( Unevictable
).
비슷한 방정식이 또 있나요?
free
출력 에서 "사용됨"은 결과가 음수(이런 일이 발생할 수 있음)가 아닌 한 "전체 - 사용 가능 - 캐시 - 버퍼"로 계산됩니다.예를 들어LXC) 이 경우에는 "완전히 무료"입니다. 따라서 모든 경우에 "전체"는 "사용+사용 가능+캐시+버퍼" 또는 "사용+사용 가능"입니다.