여전히 "비활성"메모리가있을 때 Mac OS X에서 스왑을 비활성화하는 방법은 무엇입니까?


61

OS X의 일상적인 사용 (인터넷을 통한 다양한 게시물에 따라 여러 가지 다른 현상)에서 흔히 발생하는 현상 인 "사용 가능한"메모리가 더 이상 없을 때마다 시스템이 느려지는 것처럼 보입니다. 디스크 활동이 많고 vm_stat가 많은 페이지 아웃을보고하기 때문에 이는 스와핑 때문일 수 있습니다. (잘못 나를 교정)

그러나 "비활성"램의 양은 일반적으로 스왑 시작 / 발생 / 종료시 사용 가능한 모든 메모리 (^ 1.)의 약 12.5 % -25 %입니다.

에 따르면 http://support.apple.com/kb/ht1342 :

비활성 메모리

메모리의이 정보는 현재 사용되고 있지 않지만 최근에 사용되었습니다.

예를 들어, Mail을 사용한 후 종료 한 경우 Mail에서 사용중인 RAM이 비활성 메모리로 표시됩니다. 이 비활성 메모리는 사용 가능한 메모리와 마찬가지로 다른 응용 프로그램에서 사용할 수 있습니다. 그러나 다른 응용 프로그램에서 비활성 메모리를 사용하기 전에 Mail을 열면 느린 하드 디스크에서 Mail을로드하는 대신 비활성 메모리가 활성 메모리로 변환되므로 Mail이 더 빨리 열립니다.

그리고 http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html 에 따르면 :

비활성 목록에는 현재 실제 메모리에 상주하지만 최근에 액세스하지 않은 페이지가 포함됩니다. 이 페이지에는 유효한 데이터가 포함되어 있지만 언제든지 메모리에서 해제 될 수 있습니다 .

따라서 기본적으로 : 프로그램이 종료되면 메모리가 비활성으로 표시되어 언제든지 소유권을 주장 할 수 있습니다. 여전히, OS X은 "Free"메모리가 부족할 때마다이 메모리를 요구하는 대신 스왑 파일로 메모리 스왑 아웃을 시작하는 것을 선호합니다.

왜? 예를 들어, 비활성 메모리를 즉시 해제하고 스왑 파일을 건드리지 않는 것보다이 동작의 장점은 무엇입니까? 일부 소스 (^ 2.)는 OS X가 "비활성"메모리를 해제하기 전에 스왑하기 위해 페이징 아웃한다고 표시하지만, 메모리 가 언제라도 메모리에서 해제 될 수있는 경우에는 의미가 없습니다 . 스와핑은 비싸고, 출시는 싸다. 맞지?

선호도 또는 알려진 핵을 사용하여이 동작을 변경할 수 있습니까? (바람직하게 swap / dynamic_pager를 비활성화하고 다시 시작하는 것을 포함하지 않는 것이 바람직합니다 ...)

퍼지 명령과 일부 사용 가능한 메모리를 강제로 복구하는 디스크 권한 복구의 개념에 감사 하지만, 실제로 스왑 / 릴리스 결정 논리를 수정하는 것보다 더 많은 여유 메모리를 강제로 강제하는 방법입니다.

Btw 비슷한 질문이 여기에 요청되었습니다 : http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/ 그리고 여기 : http : //hintsforums.macworld .com / showthread.php? t = 87688 이지만 OP가 핵심 질문을 다시 한 번도 대답하지 않는 답변은 없습니다 ...

^ 1. 업데이트 17-mar-2012 이 질문을 처음 게시 한 이후 4GB에서 8GB의 설치된 램으로 이동했지만 문제가 남아 있습니다. "비활성"램의 양은 이전에 0.5gb-1.0gb였으며 스와핑이 시작 / 발생 / 종료 될 때 일반적으로 약 1.0-2.0GB입니다. 즉, 램의 약 12.5 % -25 %가 osx에 의해 비활성으로 유지되는 것으로 보입니다 커널 로직.

^ 2. 예를 들어 https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work- 일 :

모든 메모리가 사용되면 (여유 메모리가 0 임) OS는 비활성 메모리를 스왑 파일에 기록하여 활성 메모리에 더 많은 공간을 만듭니다.

2012 년 3 월 17 일 업데이트

다음은 지금까지 제안 된 방법을 요약 한 것입니다.

퍼지 명령

"성능 분석을 위해 콜드 디스크 버퍼 캐시로 초기 부팅 조건을 추정하는 데 사용됩니다. malloc, vm_allocate 등을 통해 할당 된 익명 메모리에는 영향을 미치지 않습니다."

이는 osx가 디스크 캐시를 스왑 아웃하는 것을 방지하는 데 유용하지만 (OSX가 실제로 처음에 그렇게하는 것은 우스운 일이지만) 디스크 캐시가 해제된다는 단점이 있습니다. 스왑 아웃을하면 콜드 디스크 버퍼 캐시가 생겨 성능에 부정적인 영향을 줄 수 있습니다.

freeMemory에서 응용 프로그램 및 / 또는 디스크 권한을 복구하는 것은 약간의 여유 메모리를 강제로

메모리를 해제 하는 데 도움이되지 않고 기가 바이트의 메모리 내용 만 램에서 HD로 이동합니다. 결국, 많은 vm이 이제 스왑 상태이므로 메모리를 해제하는 동안 열려있는 응용 프로그램을 사용하려고하면 스왑 인이 많이 발생합니다.

사용 스왑 할당 속도 향상 dynamicpagerwrapper을

스왑 사용 속도를 높이기 위해해야 ​​할 일이 좋은 것처럼 보이지만 여전히 메모리가 비활성 상태 인 동안 OSX 스와핑 문제를 해결하지는 못합니다.

dynamicpager 를 비활성화 하고 다시 시작 하여 스왑 비활성화

이것은 모든 메모리가 사용될 때 osx가 시스템 정지 가격으로 스왑을 사용하지 않도록합니다. 실행 가능한 대안이 아닙니다 ...

해킹 된 dynamicpager를 사용하여 스왑 비활성화

위의 dynamicpager를 비활성화하는 것과 유사하게, 의견에서 블로그 게시물에 대한 일부 발췌문은 이것이 "유효하지 않은 메모리가 평소와 같이 높다"는 해결책이 아니라는 것을 나타냅니다. "시스템에 메모리가 부족하면 전체 OS가 정지됩니다 ...", "Mac의 전체 메모리를 사용하면 시스템이 정지 될 수 있습니다"

요약하자면, 여전히 "비활성"메모리가있을 때 Mac OS X이 스왑을 사용하지 못하게하는 방법을 알지 못합니다. 그것이 가능하지 않다면, 아마도 osx 가 언제라도 메모리에서 해제 될 수있는 메모리를 스왑 아웃하는 것을 선호하는 이유에 대한 설명이 있습니까?


1
이 활동 모니터 번호로 설명되는이 문제가 있습니다. bassistance.de/i/f2322d.png 사용 가능한 메모리는 거의 없지만 많은 비활성 메모리가 있습니다. 40GB 페이지 아웃에서 볼 수 있듯이 OSX는이를 회수하는 대신 스왑을 많이 시작하는 것을 선호합니다.
Jörn Zaefferer

사용 가능한 메모리가 충분하며 여전히 여러 GB의 스왑이 사용되고 있습니다. 16GB rMBP.
Steven Lu

1
분명히 어떤 사람들은 "제거"를 실행 혜택을보고 apple.stackexchange.com/questions/67031/... 비 부정적인
rogerdpack

답변:


19

정의에 따라 비활성 메모리는 페이징 아웃 할 준비가 된 메모리이며, 페이징 아웃하려면 스왑에 쓰는 것이 필요할 수 있습니다. 이것은 최적화해야 할 문제 나 문제 가 아닙니다 . 실제로 OS X는 설계된대로 작동합니다 .

불행히도 기술 지원 작성자는 커널 개발자가 아니며 Apple 기술 자료 지원 기사 인용문은 비활성 메모리가 프로그램에서 사용하지 않는 메모리라고 주장 할 때 잘못되었습니다. 프로그램을 종료하면 모든 상주 메모리가 Free가됩니다. 비활성 상태에서는 멈추지 않습니다. 그러나 메모리 관리의 작동 방식을 설명하는 개발자 사이트에 대한 두 번째 링크 는 전체를 읽는다면 좋은 자료입니다.

OS X에서 "비활성 메모리"의 의미에 대한 많은 오해가 있습니다. 오해와 달리 모든 비 활동 메모리가 비어 있거나 사용되지 않거나 캐시되거나 제거 가능한 것은 아닙니다. 실제로 최근에 액세스 한 경우 활성 메모리도 캐시하거나 제거 할 수 있습니다. 많은 비활성 메모리에는 단순히 버릴 수없는 데이터가 포함되어 있습니다. 폐기 된 페이지는 폐기 된 페이지에 유효한 데이터가 포함되어 있고 (OS X 개발자 측에서 인용 한대로) 프로그램은 (가상) 메모리에 저장된 데이터가 사라지지 않을 것으로 예상하기 때문에 프로그램이 중단됩니다.

비활성 메모리에는 활성 메모리와 동일한 유형의 데이터가 포함됩니다. 유일한 차이점은 OS X에서 일부 메모리 청크가 한동안 읽거나 쓰지 않았다는 것을 알아 차렸다는 것입니다.

OS X이 일부 메모리를 비활성 및 다른 영역을 "활성"으로 분류하는 이유는 페이징 아웃과 관련이 있습니다. 메모리가 부족하면 일부 데이터를 페이징 아웃해야합니다. 문제는 어떤 데이터입니까? 프로그램이 즉시 다시 필요한 것으로 밝혀진 데이터를 페이지 아웃하면 시간이 낭비되고 아무것도 달성하지 못합니다. 따라서 프로그램에서 즉시 다시 사용할 필요가없는 메모리를 페이지 아웃하려고합니다.

프로그램이 가상 메모리를 사용할 수 있지만 OS가 계획 내용에 대해 아무것도 말하지 않고 OS에 알려주지 않기 때문에 향후에 어떤 페이지가 필요하지 않을지 예측하기가 어렵습니다. 그러나 휴리스틱으로 대부분의 프로그램은 메모리 사용이 "고정적"입니다. 메모리를 얼마 동안 사용하지 않으면 해당 메모리를 계속 사용하지 않고 최근에 사용한 메모리를 계속 사용할 수 있습니다.

따라서 OS에서 일부 데이터를 페이지 아웃하기로 결정하면 최근에 사용되지 않은 페이지를 교체하는 전략이 사용됩니다. 그렇기 때문에 OS X은 프로그램이 차지하고있는 메모리를 "활성"과 "비활성"의 두 더미로 분류합니다. 위의 게시 된 링크를 완벽하게 읽으면 그 과정이 어떻게 일어나는지 개발자 사이트는 말한다 :

  • 메모리가 부족해지기 시작하면 OS는 활성 메모리 페이지를 통과하기 시작하고 각각에 플래그를 설정합니다.
  • 프로그램이 페이지를 읽거나 쓰면 플래그가 지워집니다.
  • 약간의 지연 후에 플래그가 지워지지 않으면 해당 페이지가 "비활성"파일로 정렬됩니다.
  • 프로그램에서 "비활성"페이지에 액세스하면 "비활성"파일로 돌아갑니다.
  • 메모리가 부족하면 "비활성"페이지가 페이지 아웃됩니다.

교체 할 메모리를 결정하는이 정렬 프로세스는 모든 최신 운영 체제에서 유사합니다. Linux에는 Linux Virtual Memory Manager 이해에 설명 된대로 동일한 두 개의 활성 및 비활성 페이지 목록이 있습니다. Windows는 세 개 이상의 최근 등급에서 약간 다른 것을 사용할 수 있습니다. 현재 신뢰할 수있는 최신 기술 설명을 찾을 수 없습니다. 더 많은 구현은 Wikipedia 페이지에서 "Page replacement algorithm" 페이지에서 논의됩니다 . OS X와의 유일한 차이점은 통계가 표시되는 방식입니다. 누군가 활성 또는 비활성 top모니터 또는 활동 모니터 에 별도의 숫자를 표시하는 것이 좋습니다 . 돌이켜 보면 아마도 그렇게 좋은 생각은 아니었을 것입니다 (그리고 이것은 OS X 10.9에서 바뀌 었습니다).

플래그를 설정하고 지우고 활성 / 비활성 힙을 유지 관리하는이 프로세스에는 약간의 프로세서 성능이 필요합니다. 이러한 이유로, 사용 가능한 메모리가 많을 때 OS X은이를 수행하지 않습니다. 따라서 시작한 첫 번째 프로그램은 사용 가능한 메모리가 부족해질 때까지 모든 "활성"메모리로 표시됩니다.

따라서 빈 슬레이트에서 시작하여 점점 더 많은 프로그램을 열면 활동 모니터에서 다음 진행 상황을 볼 수 있습니다.

  • 첫째, "사용 가능한"메모리가 많고 비활성 상태가 거의 없습니다. 메모리 플래 거가 실행을 시작하지 않았기 때문입니다.
  • 사용 가능한 메모리 양이 줄어들면 OS X에서 메모리 플래 거를 실행하기 시작하고 "비활성"양이 증가하기 시작합니다. "비활성"의 각 비트는 이전에 "비활성"이었습니다.
  • 사용 가능한 메모리가 부족하면 "비활성"파일의 페이지가 페이지 아웃됩니다. 메모리-플래 거는 또한 메모리를 활성 및 비활성으로 분류하는 풀 틸트를 실행할 것이다. 일반적으로 스왑이 작성되는 동안 많은 "비활성"이 표시되어 메모리 플래그가 예상 한 작업을 수행하고 있음을 나타냅니다.

페이지 는 반드시교환하기 전에 비활성으로 분류하십시오. "이 페이지에는 유효한 데이터가 포함되어 있지만 언제든지 메모리에서 해제 될 수 있습니다"라는 Apple Developer 사이트의 인용문입니다. 이것은 활성 페이지와 반대이며, 페이지가 비활성으로 강등 될 때까지 해제되지 않습니다. 페이지를 공개하는 방법에는 여러 가지가 있습니다. 페이지가 파일에서 매핑되었고 수정되지 않은 경우 즉시 삭제하고 필요할 때 다시 읽을 수 있습니다. 마찬가지로 메모리가 이전에 스왑 아웃되고 스왑 인 이후 수정되지 않은 메모리 인 경우 프로그램은 캐시와 제거 가능한 메모리를 명시 적으로 할당하여 필요에 따라 잊고 다시 만들 수있는 데이터를 저장할 수 있습니다 (그러나 프로그램이 캐시를 할당하는 이유) 해당 데이터를 재생성하는 데 상당한 시간이 걸리는 경우입니다.

따라서 Activity Monitor에서 "비활성"메모리의 양을보고 컴퓨터가 스왑을 작성하는 동시에 많은 비 활동이 있음을 확인하면 시스템이 설계된대로 작동하고 있음을 알려줍니다.

비활성 메모리와 파일 캐시간에 혼동이 있습니다. Activity Monitor가 이미 별도의 제목으로 나열하기 때문에 왜 혼란이 있는지 잘 모르겠습니다. 캐시는 다시 액세스해야하는 경우 파일 시스템에서 읽거나 쓴 최근 데이터를 저장하는 데 사용되는 메모리입니다. 메모리가 부족하면 OS X은 캐시를 먼저 제거하는 경향이 있습니다. 당신이 스왑 탈곡이 있고, 활동 모니터는 캐시 (비활성 NOT)의 큰 더미를 보여줍니다 경우 문제가 될 것입니다. 그러나 비활성 메모리는 다릅니다.

확실하지 않은 경우 "비활성"과 "비활성"의 차이점을 무시하십시오. 그것들을 "프로그램이 사용하는 메모리"의 한 덩어리로 간주하고 두 숫자를 더하십시오. 이것은 메모리 사용에 관해 말할 때 다른 모든 운영 체제가하는 일입니다.

OS X 10.9에 대한 참고 사항 : Mavericks는 "스왑의 또 다른 계층 인"메모리 압축 "을 도입했습니다. 활성 페이지는 이제 비활성으로 분류 된 다음 압축되어 (사용중인 도구에 따라 커널 메모리로 표시 될 수 있음) 메모리 사용량이 증가함에 따라 스왑하도록 작성됩니다. Mavericks는 Activity Monitor에서 활성 및 비활성에 대해 별도의 숫자 표시를 중지했습니다. 특히 주변의 오해를 고려할 때 유용한 것으로 보이지 않기 때문입니다.


4

macos X의 swappiness (또는 호출) 동작을 조정하는 쉬운 방법은 현재 없습니다. 몇 가지 해킹이 있습니다 (개발자 계정 및 SDK 필요).

http://cestdelamerde.com/archives/22-Killing-Mac-OS-X-Swapping-How-To-Disable-dynamic_pager.html

http://dropsafe.crypticide.com/article/3848

행운을 빕니다!

추신. MacOSX의 활성, 비활성 및 기타 메모리에 대한 일반적인 검토를 위해이 답변을 읽을 수도 있습니다 ( OS X의 유선 메모리 및 활성 메모리).


답장을 보내 주셔서 감사합니다. 교환 성을 조정하면 확실히 도움이 될 것입니다. 첫 번째 링크와 관련하여 스왑 / dynamic_pager를 비활성화하고 다시 시작하지 않는 해킹을 찾고 있습니다. 스왑 사용을 비활성화하기 위해 너무 많은 노력이 필요하고 적은 양에 접근 할 때 시스템이 불안정하게 유지되기 때문에 비활성 및 여유 메모리 두 번째 링크는 스왑 파일이 계속 커지는 문제를 나타냅니다. 스왑 파일이 적을 때 특히 중요한 문제이지만
실제로이

4

영구적 인 해결책은 아니지만 적어도 일부 비활성 메모리를 회수하여 끔찍한 교환을 피할 수 있습니다. http://itunes.apple.com/nz/app/freememory/id460931672?mt=12

이 도구는 무료이며 사용하기 매우 쉽습니다. 시작되면 시스템 도구 모음 / 메뉴에서 "사용 가능한 메모리"옵션을 선택하십시오.

ActivityMonitor 메모리 표시와는 달리, 사용 가능한 메모리 만 표시하는데, 이는 스왑이 진행 중인지 여부에 대한 더 나은 지표 인 것 같습니다.


나는 약 2 개월 전에 당신의 제안 이후이 응용 프로그램을 평가하고 있습니다. 이 응용 프로그램은 실제로 많은 양의 메모리를 적극적으로 주장하고 해제하는 등 다양한 트릭을 통해 "사용 가능한"메모리의 양을 늘리는 것 같습니다. 그러나 이로 인해 "사용 가능한"것과 동일한 양의 메모리 만 교체됩니다. 즉 , 메모리를 해제 하는 데 도움이되지 않고 메모리 내용을 램에서 HD로 이동하는 것만 의미합니다. 결국, 많은 vm이 이제 스왑 상태이므로 메모리를 해제하는 동안 열려있는 응용 프로그램을 사용하려고하면 스왑 인이 많이 발생합니다. :(
Motin

@Motin, FreeMemory를 몇 달 동안 사용해 왔으며 적어도 내 경험으로는 그렇게하지 않습니다. 액티비티 모니터에서 본 내용을 기반으로 추측을 교육해야하는 경우, FM은 "활성"메모리를 먼저 소비한다는 점이 다릅니다. 이는 디스크 캐시보다 우선 순위가 높습니다. 우선 순위가 높아 다른 메모리를 "해제"한 다음 자체 메모리를 해제 합니다 . 나는 그것이 스왑을 크게 증가시키는 것을 보지 못했습니다 (소비량이 소비되는 동안 할당 될 수 있습니다).
eyelidlessness

2

OS X 10.5부터는 MAC OS X에 명백한 메모리 관리 문제가 있습니다. 웹은 이미 일정 시간이 지나면 시스템 속도가 크게 저하된다는 불만으로 혼란을 겪었습니다. 당시에는 1GB RAM의 Mac Mini 시스템이 느려서 하드웨어가 잘못되었다고 결론을 내 렸습니다.

이제 2010 MBP, 코어 i7, 8GB RAM, 듀얼 GPU가 있습니다. Mac OS X Snow Leopard는 고통 스러웠지만 OS X Lion으로 마이그레이션 한 후 MAC에서 심각한 작업을하는 것은 악몽이되었습니다.

마침내 문제가있는 시나리오를 재현 할 수 있었으므로 테스트를 실행하고 화면을 비디오로 녹화했습니다.

MAC OS X Lion 성능 문제-손상된 메모리 관리

tar / bzip 명령을 기본 유닉스 작업으로 대량의 그림 파일에서 Pictures / 폴더로 실행합니다. 시작하기 직전에 "purge"명령을 실행하여 비활성 / 캐시 된 프로그램 데이터를 삭제합니다.

비디오에서 사용 가능한 메모리가 매우 빨리 떨어지기 시작하고 비활성이 계속 증가하고 있음을 알 수 있습니다. "bsdtar"명령을 살펴보면 RAM 조각 만 사용되므로이 프로세스에는 문제가 없습니다. 프로그램 메모리 누수라고 말할 수 없습니다. 문제는 비활성 램이 아니라 활성 / 유선에 있기 때문입니다.

여유 메모리가 100MB 아래로 떨어지면 Safari, iPhoto 및 MS Word와 같은 일부 응용 프로그램을 시작했으며 비디오에서 응용 프로그램을 시작하는 데 몇 분이 걸린다는 것을 알 수 있습니다 (일반 RAM (사용 가능한 RAM이있을 때)) 로드하는 데 약 3-5 초가 걸립니다.

Linux Centos 6 상자에서 동일한 시나리오와 동일한 명령을 실행하지만 아무런 문제가 없습니다! 메모리 사용량은 약 10-20MB이며 캐시 / 버퍼에는 문제가 없습니다.

Mac OS X에서는 메모리 관리가 매우 어려워 야합니다!


2
당신이보고있는 것은 메모리에 시스템 캐싱 파일입니다. 캐시가 제거되지 않는다는 점에서 문제가 있음에 동의하지만 캐싱 자체 (및 결과적으로 비활성 메모리의 증가)는 제정신이며 때로는 유용한 성능 기능입니다.
eyelidlessness

또한 테스트 환경은 무균 상태가 아닙니다. 우리는 QuickTime Player가 무엇을하고 있는지 또는 다른 프로그램이 열려 있는지 알 수 없습니다.
chrishiestand

1

나는 이것에 대한 정답이 없다고 확신합니다. Mac을 잠자기 상태로 유지할 때도 메모리가 그대로 유지되며, 잠자기 때마다 자라거나 커집니다.

"재미"(일명 비싼) 측면에서 메모리를 업그레이드하거나 HDD를 SSD로 교체 할 수 있으므로 스와핑은 성능 저하의 원인이되지 않습니다. Corsair 메모리는 이제 합리적인 가격으로 제공되므로 첫 번째 옵션을 선택했습니다.

16GB RAM


2
SSD는 쓰기주기가 제한되어 있습니다. 또한 트림이 지원되지 않는 SSD의 경우 플래시 셀을 삭제해야하므로 쓰기 비용이 많이들 수 있습니다.
Wavy Crab

"Sleep으로 인해 메모리 사용량이 증가합니다"문제에 대한 출처를 인용 할 수 있습니까?
GordonM

내 경험을 인용 할 수 있습니까? :) 빠른 검색을 통해 이것을 발견했습니다 : discussions.apple.com/message/21624847#21624847 + 비활성 메모리와 관련된 많은 항목이 필요할 때 지워지지 않습니다. 나는 개인적으로 매 수면 후 비활성 메모리가 이전과 같이 유지되고 증가하는 방법을 개인적으로 보았습니다. '퍼지'는 옵션이지만 20 분마다 한 번씩 비활성 메모리를 제거하고 싶지 않습니다 (4GiB RAM의 경우).

1
@WavyCrab SSD는 쓰기주기가 제한적일 수 있지만 그 한계에 도달 할 가능성은 없습니다. 데이터 센터의 SSD가 아니라면 걱정하지 않아도됩니다. 어쨌든 과도한 쓰기로 SSD를 종료하려는 경우 HDD를 더 빨리 종료합니다.
andreadi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.