2010-06-11 4 views
19

리눅스 /proc/meminfo은 많은 메모리 사용 통계를 보여줍니다.Linux에서 사용 가능한 메모리를 안정적으로 측정하는 방법은 무엇입니까?

MemTotal:  4040732 kB 
MemFree:   23160 kB 
Buffers:  163340 kB 
Cached:  3707080 kB 
SwapCached:   0 kB 
Active:  1129324 kB 
Inactive:  2762912 kB 

꽤 겹치는 부분이 있습니다. 예를 들어, 내가 이해하는 한, 활성 페이지 캐시 ("캐시 된"및 "활성"에 속함) 및 비활성 페이지 캐시 ("비활성"+ "캐시 된")가있을 수 있습니다.

는 내가하고 싶은 "무료"메모리를 측정하는 것입니다,하지만 가능성이 사용 된 페이지를 포함하는 방식으로 전체 시스템의 성능에 큰 영향없이 삭제 될 수 있습니다.

처음에 "자유"+ "비활성"을 사용하려고했지만 Linux의 "무료"유틸리티는 "버퍼 조정"디스플레이에 "무료"+ "캐시 됨"을 사용하므로 더 나은 점이 무엇인지 더 잘 알고 있습니다. 접근법이 있습니다. 커널 메모리가 부족할 때

, 드롭 페이지의 우선 순위는 무엇이며, 사용 가능한 메모리를 측정 할 수있는 더 적절한 메트릭은 무엇인가?

+1

또한'Committed_AS'를 확인하십시오. 이것은 커널이 실제로 처리 한 실제 크기입니다. 현재 메모리 사용량을 고려할 때 xx 바이트를 할당/잠금/사용하면 어떻게 될지 예측하는 데 더 많은 노력을 기울이는 것처럼 보입니까? –

+0

@Tim Post, 그래, 나는 심지어 그림에 과도한 투입을 시작하지 않았다. 더 많은 메모리를 사용하면 나쁜 일이 언제 시작되는지 예측할 수있는 숫자를 얻으려고합니다. –

답변

2

가 나는 페이지가 감소 할 때, 시스템이 "전체 시스템 성능에 큰 영향"가 발생할 것이다 측정하기 어렵다라고 말하고 싶지만. 사용자 프로세스가 사용하는 페이지는 (총계) - (Free + Cached + Paged)가됩니다. 두 번째 용어는 필요한 경우 커널이 해제 할 수있는 모든 메모리입니다. 그러나 캐시 및 페이지에 사용되는 메모리 페이지를 비우는 것은 전반적인 시스템 성능에 중요한 영향을 미칩니다.

휴리스틱을 사용하려는 경우 "사용하지 않는"버퍼 또는 페이지 캐시 메모리의 총 크기 (킬로바이트 단위)를 자유롭고 사용 가능해야합니다. 최근에 사용되지 않았고 다른 목적을 위해 재생 될 수있는 메모리입니다. " 시스템을 계속 사용하면 시스템이 계속 정상적으로 작동하므로 시스템에서 일부 페이지를 최근에 사용했지만 다시 사용하지 않기 때문에 "Active"의 일부 비율을 추측 할 수 있습니다. 당신은 저보다 시스템에 대해 더 많이 압니다. 시스템이 당신이하려고하는 일에 전념한다면, 곧 사용할 수있는 Active의 페이지와 캐시 된 파일은 시스템이 최근에 다른 용도로 사용되었는지 여부에 달려 있습니다. "사용 가능한 메모리는"정확히 무엇을 의미하는지부터

8

는 목적에 따라, 당신의 목적은 OOM 상황을 방지하는 것입니다 :

체크 아웃 how Qt Extended (previously Qtopia) anticipates OOM situations.

두 개의 이벤트가 있습니다

  • (MemFree가 + 버퍼 + 캐시 됨)/MemTotal < 임계 값 (/proc/meminfo)
  • 큰 페이지 오류> 임계 값 (pgmajfault in /proc/vmstat 알았어)

첫 번째 경고는 메모리가 부족하다는 경고이며 페이지 폴트를보다 자주 모니터링합니다. 두 번째 신호는 시스템 성능을 죽이고 OOM 킬러가 실행할 좋은 힌트입니다.

+0

+1 OOM을 막는 좋은 알고리즘 – SeanDowney

3

처음에는 '+ buffers/cache'열에서 free의 실제 출력과 같이 쉽게 질문을 찾았습니다. 정상적으로 작동합니다. 같은 블록 무거운 읽기가있을 때

그러나 그것이 작동하지 않는 상황 중 하나

입니다. 예 :반복 같은 일 gb_file 읽기 : 시스템> 1 기가 바이트 캐시가

while true; do cat 1gb_file >/dev/null; done 

경우,이 빠르게 실행됩니다. 그러나 당신이 다른 것을 위해 그 캐시의 일부를 사용하기 시작한다면 그것은 시스템의 성능을 부술 것입니다.

솔루션을 평가할 때 위의 방법을 시도해보고 솔루션이이를 고려하는지 확인하십시오.

2

나는 다음과 같은 사용 : 리눅스 3.14에서

FREE_KB = MemFree + Buffers + Cached 

FREE_KB=$(($(echo `sed -n '2p;3p;4p' < /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /+/g"))) 


USED_KB = MemTotal - MemFree - Buffers - Cached 

USED_KB=$(($(echo `head -n4 /proc/meminfo | sed "s/ \+/ /g" | cut -d' ' -f 2 ` | sed "s/ /-/g"))) 
+0

/proc/meminfo가 반환하는 바이트 또는 kb가 시스템에 종속적인지 여부는 나에게 나타납니다. 나를 위해 위의 코드는 YMMV 바이트를 반환하는 것으로 보입니다. – russellpierce

+0

어떤 커널을 사용합니까? 현재 Linux 함수에서 meminfo_proc_show는 kB 만 반환합니다. – Const

2

은/proc/meminfo 파일의 새로운 메트릭 MemAvailable이 있습니다.

유틸리티 'free'출력에서 '-/+ buffers/cache :'행을 확인하십시오.

관련 문제