Linux 메모리 계산 및 측정: 무엇이 더하기와 무엇이 같나요?

Linux 메모리 계산 및 측정: 무엇이 더하기와 무엇이 같나요?

나는 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

  1. "사용 가능 + 사용 가능 = 총계"가 아닌 이유는 무엇입니까?

여유 메모리는 사용된 메모리와 여유 메모리의 하위 집합이기 때문에 시스템을 강제로 교체하지 않고 사용할 수 있는 메모리 양입니다.여유 메모리와 현재 캐싱에 사용되는 메모리를 즉시 제거할 수 있습니다. 바라보다배포판에서 이식 가능한 사용 가능한 메모리 양을 얻는 방법은 무엇입니까?계산에 대한 세부정보입니다.

  1. "여유 + 버퍼 + 캐시 = 사용 가능"이 아닌 이유는 무엇입니까?

버퍼와 캐시에 사용되는 일부 메모리는 사용할 수 없기 때문에 즉시 제거할 수 없으며, 이를 사용하면 시스템이 워터마크 위로 밀려나게 됩니다.

  1. "활성 + 비활성 + 유휴 = 총계"가 아닌 이유는 무엇입니까?

활성 및 비활성 값은 해당 LRU를 반영하고 페이지 테이블과 같은 일부 페이지는 추적되지 않거나 PageTables제거할 수 없습니다( Unevictable).

비슷한 방정식이 또 있나요?

free출력 에서 "사용됨"은 결과가 음수(이런 일이 발생할 수 있음)가 아닌 한 "전체 - 사용 가능 - 캐시 - 버퍼"로 계산됩니다.예를 들어LXC) 이 경우에는 "완전히 무료"입니다. 따라서 모든 경우에 "전체"는 "사용+사용 가능+캐시+버퍼" 또는 "사용+사용 가능"입니다.

관련 정보