매버릭스와 요세미티의“메모리 압력”은 어떤 규모 나 측정을 준수합니까?


57

Mavericks (및 Yosemite)의 Activity Monitor는 메모리 다이어리 라는 새로운 다이어그램을 보여줍니다 . 안타깝게도 도움말 텍스트는 정확히 무엇을 측정하는지 모호하게 설명합니다. 메모리 압력은 어떻게 계산됩니까?

매버릭스 활동 모니터-메모리

Mavericks의 가장 새로운 기능에 대한 여론 조사에서 그림 크래들 이이 답변으로 갑니다 .

답변:


51

메모리 부족은 사용 가능한 메모리 백분율의 단순한 게이지가 아니며 0 ~ 100 % 그래프 인 것 같습니다. 의 sysctl값은 사용 vm.memory_pressure가능한 메모리 페이지와 비활성 메모리 페이지 대 유선 및 활성 페이지 간의 비율을 추적하는 계산 된 대상과 관련하여 계산됩니다. 절대 카운터는 vm_stat가상 메모리의 세부 할당을 검사하기 위해 명령 줄 도구를 사용하여 볼 수 있습니다. Jonathan Levin은 http://newosxbook.com/articles/MemoryPressure.html에 macOS 및 iOS 가상 메모리와 메모리 압력 계산 방법 및 압력 지수가 높을 때 취한 조치에 대한 훌륭한 문서를 제공 합니다.

계산을 제공하는 관련 가상 메모리 (vm)는 다음과 vm.memory_pressure같습니다.

  • vm.page_free_count -무료 페이지의 절대 수
  • vm.vm_page_free_target - "무 압력"상황에 대한 계산 된 목표 또는 목표
  • vm.page_free_wanted -vm 시스템이 현재 계산 된 압력 지수를 완화하기 위해 원하는 것

따라서 활동 모니터 (또는 프로그래밍 방식으로 또는 명령 줄 셸에서 sysctl 값을 확인)를 사용하여 메모리 압력을 추적하는 경우 다음 네 가지 값을 확인하는 것이 좋습니다.

sysctl -a vm | egrep "page_free|pressure"

memory_pressureMavericks에 새로운 명령이 도입되었으며 메모리 하위 시스템을 경고 상태로 구동하기 위해 명령을 실행하면 메모리 압력이 노란색 범위로 증가하는 것을 볼 수 있습니다.

<code> sudo memory_pressure -l 경고 </ code>의 활동 모니터 결과

"경고"레벨이 그래프로 표시되는 압력 그래프가이 상태로 꾸준히 증가함에 따라 공구에 약 4GB의 메모리가 할당되었습니다 sudo memory_pressure -l warn. 보시다시피, 압력 이전의 시스템은 5.9GB를 사용했으며 이후에는 최대 7.99GB를 사용했으며 스왑 및 압축으로 인해 추가 할 필요조차 없습니다.

vm_stat 15측정 가능한 페이징에서 경고 결과가 어떻게 표시 되는지 확인한 후 도구 (Control-C)를 종료 한 다음 도구를 다시 실행하여 메모리 압력을 중요하게 만듭니다.sudo memory_pressure -l critical

페이징이 시작될 때 몇 분 이상이 실행되지 않았으며 도구가 디스크에 5GB의 RAM을 페이징했다고 말하면 드라이브를 채우고 도구를 종료하고 싶지 않았습니다.

<code> sudo memory_pressure -l critical </ code>의 활동 모니터 결과

경고가 종료 된 후 시스템이 RAM을 얼마나 빨리 해제했는지와 가상 메모리 시스템이 디스크로 스왑을 피하기에 충분한 페이지를 압축 할 수 없음을 나타 내기 위해 어떻게 "빨간색"영역으로 진입했는지 확인할 수 있습니다. 필자의 교육받은 추측은 압력이 빨간색으로 바뀌면 스왑 및 극적인 초과 할당 및 / 또는 무료 페이지가 시스템이 선호하는 양보다 낮고 스왑에 사용될 것으로 예상되는 비활성 페이지 및 / 또는 스왑 페이지가 활발하게 퍼져있는 시간을 나타냅니다. 마찬가지로 할당이 해제되고 가상 메모리 시스템에 압력이 가해지면 시스템이 빠르게 복구됩니다.


명확하게 해 주셔서 감사합니다. 위의 스크린 샷에서 가상 메모리, 파일 캐시 및 앱 메모리 매개 변수를 계산하는 명령 (또는 명령 세트)이 있는지 알고 싶습니다.
Muhammad Hassan Nasr

@MuhammadHassan 아래 답변은 알고리즘의 리버스 엔지니어링 요약을 다루고 xnu내부를위한 오픈 소스를 어디에서 찾아야하는지 지적합니다 . 압력의 GUI 표시와 가장 관련이있는 4 가지 값을 뽑았습니다.
bmike

30

다소 명확하고 추측을 더 정확하게하기 위해 : 메모리 압력은 memory_status (이전의 Jetsam)라는 전용 스레드와 함께 커널 (xnu)에서 사용하는 메트릭입니다. 이 스레드는 사용 가능한 RAM이 부족한시기를 감지합니다. OS X에서는 스왑을 강제 할 수 있으며 iOS에서는 스왑이 없기 때문에 가장 많은 메모리 소비 앱을 종료합니다. 매버릭스에서 두 OS는 서로 더 가깝습니다. Memorystatus는 Obj-C 런타임이 결국 appDidReceiveLowMemoryWarning으로 변환하는 커널 노트를 발행합니다. 앱은 사용되지 않거나 불필요한 메모리 (예 : 캐시)를 제거해야합니다. 다윈의 libC도 메모리를 자동으로 제거합니다.

vm_pressure_monitor (정확히 기억한다면 # 296)라는 특정 (문서화되지는 않았지만) 시스템 호출이 있는데, 이로 인해 클라이언트가 압력 이벤트를 수신하고 얼마나 많은 물리적 페이지를 회수 할 수 있는지 확인할 수 있습니다.

http://newosxbook.com/index.php?page=downloads 에서 다운로드 할 수있는 OS X 용 프로세스 탐색기를 사용하여 Mavericks의 압력 이벤트를 볼 수 있습니다 . 둘 다 압력 이벤트뿐만 아니라 압력 "게이지"를 보여줍니다.


- 그 웹 사이트는 또한 상세한 기사가 newosxbook.com/articles/MemoryPressure.html - 메모리 압력을 자세히 설명하고 OS X 및 iOS에서 처리
user61711

매버릭스와 iOS 커널의 유사점과 차이점에 대한 자세한 내용. Process Explorer 링크에 감사드립니다.
bmike

14

메모리 압력은 Mach가 내부적으로 유지하는 두 개의 카운터에 의해 정의됩니다.

  • vm_page_free_count: 현재 사용 가능한 RAM 페이지 수
  • vm_page_free_target: 최소한의 RAM 페이지 수는 최적으로 확보해야합니다.

sysctl을 사용하면 다음을 쉽게 볼 수 있습니다.

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

사용 가능한 페이지의 양이 목표량 이하로 떨어지면 압력이 발생합니다.


에서 http://newosxbook.com/articles/MemoryPressure.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.