“비활성 메모리”가 많은 경우 OS X에서 스왑을 사용하는 이유는 무엇입니까?


22

몇 달 동안 OS X를 사용하고 있습니다 (Lion 및 현재 Mountain Lion). 내 미니에 8GB가 있으며 거의 ​​매일 거의 다가옵니다. 8GB의 Windows 7 컴퓨터에서는 그런 종류의 문제가 없었습니다. 어쨌든, 인터넷을 통해 비활성 메모리가 최근에 닫히고 더 빨리 다시 여는 데 사용할 수있는 프로그램의 앱 캐시라는 것을 읽었으며 필요한 경우이 비활성 메모리를 새 앱으로 해제 할 수 있습니다. 릴리스되지 않습니다. 대신 OS X이 교환을 시작합니다. 제 질문은 "비활성 메모리"가 많을 때 OS X이 스왑을 사용하는 이유입니다. 여기에 무슨 뜻인지 보여주는 화면이 있습니다 :

여기에 이미지 설명을 입력하십시오

나는 스와핑을 시작하기 전에 OS X가 2.69GB를 사용할 수있는 공간이 있기를 정말로 희망합니다.


그렇습니다. 이상합니다. 하나의 응용 프로그램이 모든 RAM을 차지합니까? OSX가 응용 프로그램이 한 번에 80 % 이상의 RAM을 사용하지 않도록 제한 할 수 있습니다. 비활성은 자유를 의미하지 않습니다. 무언가를 위해 예약되어 있습니다.
Piotr Kula

아니오 - 많은 애플리케이션, 비활성 메모리가있을 때 cache.There하지 스왑에 OS X를 만드는 방법이 있어야 최근에 닫은 응용 프로그램이기 때문에 무료 내가 읽고에서 브라우저, 이클립스 등
Balchev

언제든 그것을 재현 할 수 있고 필요한 경우 활동 모니터의 화면을 만들 수 있습니다
Balchev

2
비활성 메모리는 사용 가능한 메모리가 아닙니다.
kinokijuf

2
그러나 @kinokijuf 여유 메모리가 남아 있지 않으면 여유 메모리로 작동해야합니다. 어쨌든 비활성 메모리가 항상 디스크로 스왑되면 활성-비활성을 구분할 실제 지점이 없습니다.
Pieter

답변:


18

비활성 RAM 페이지가 실제로 활성화되었을 때 스와핑이 발생했습니다.

( 업데이트 : 의견에서 명확하게 지적 되었 듯이, 이것은 귀하의 경우가 아닙니다. 따라서 동일한 문제를 가진 사람들 은 수평 규칙으로 건너 뛸 수 있습니다 .)

즉, 많은 프로그램이 실행 중이고 커널이 일부 페이지를 교체했습니다. 그런 다음 일부 프로그램을 종료했습니다. 커널은 RAM 페이지를 비활성으로 표시합니다. 그러나 이러한 페이지가 필요할 때까지 페이지를 RAM으로 다시 스왑하지 않습니다. 이로 인해 비활성 페이지와 스왑 아웃 페이지가 모두 생깁니다.

왜 사전에 페이지를 교환하지 않습니까? 그것이 배당률에 베팅 할 것이기 때문에 장기적으로 당신은집니다. 간단한 예를 생각해 봅시다 : 동시에 RAM에 맞지 않는 두 개의 프로그램 A와 B. 프로그램 A가 여전히 실행 중이고 교체 된 모든 페이지가 A에 속합니다. 프로그램 B가 종료되었고 모든 비활성 페이지가 B에 속합니다.

커널이 A의 페이지를 사전에 스왑 인하 고 즉시 다음과 같은 경우 :

  • 프로그램 A는 페이지에 액세스해야합니다-> 당신이이기십시오-페이지는 이미 RAM에 있습니다.
  • 당신은 B를 다시 시작한다-> 당신은 잃어버린다-당신은 페이지를 RAM으로 가져 오는 데 드는 비용을 "지불"했다.
  • 다른 프로그램을 시작합니다. C-> A와 C가 동시에 RAM에 맞지 않으면집니다. 그들이 맞다면, 당신은 짝수입니다.

또한 스왑 아웃 (디스크에 쓰기)이 스왑 인 (디스크에서 읽기)보다 비용이 많이 든다는 점도 고려하십시오. 이 "베팅"을 더욱 어렵게 만듭니다.

한마디로 : 커널을 신뢰하고 현명하게하려고하지 마십시오.


업데이트 : 활동 모니터를 사용하여 시스템 메모리 읽기 기사를 통해 많은 사람들이 메모리 가 작동한다고 믿기 때문에 비활성 메모리가 작동하지 않는 것으로 나타났습니다 . 비활성 메모리에 대한 기사에 제공된 정의가 정확합니다.

이 정보는 RAM에 있지만 활발하게 사용되고 있지 않으며 최근에 사용되었습니다.

그러나 다음 예제는 완전히 오도되고 지나치게 단순화되었습니다 (내 예제가 솔직한 것처럼).

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

더 많은 온라인 리소스를 검색 하여 다윈 커널 메일 링리스트 에서이 스레드 를 찾았습니다 . 짐 매기 인용 (다윈 팀의 생각-)

간단히 말해 커널 VM 시스템은 사용중인 페이지를 통한 메모리 압력 스캔을 처리 할 때 활성 및 비활성 표시 사이의 균형을 유지하려고합니다. 비활성 페이지는 비활성으로 표시되어있는 동안 재사용을 위해 스캔됩니다. 재사용 된 페이지는 활성으로 표시되며 일부 다른 페이지는 활성 상태에서 비활성 상태로 이동하여 활성 상태인지 감지해야합니다. 따라서 비활성은 잘못된 이름입니다. "비활성 상태 일 수 있습니다.이를 확인하십시오."

아시다시피, 현재 (현재) 노력하는 내부 잔액은 약 2/3 활성 대 1/3 비활성입니다 ...

관찰 한 동작에 대해 설명합니다. 즉, 비활성 페이지는 최근에 사용되지 않은 실행중인 프로그램에 속합니다. 따라서 새 프로그램을 시작하면 비활성 페이지가 교체됩니다. 동시에 다른 프로그램의 페이지는 비활성 대 비활성의 2/1 비율을 유지하기 위해 비활성으로 표시됩니다.

스레드는 또한 다윈의 내부에 대한 자세한 내용은 몇 가지 제안이 포함되어 있습니다. 비치 볼 문제 (일반적으로 메모리 관련이 거의 없음)로 인해 메모리 사용량 조사를 시작한 경우에도 몇 가지 제안 사항이 있습니다.

결론은 동일합니다. 커널을 신뢰하고 현명하게 시도하지 마십시오. :-)


1
안녕하세요, 당신이 저를 이해하지 못합니다-100-200MB의 여유 메모리, 2.6GB "비활성"을 좋아하고 다른 프로그램을 시작하고, 일식, xcode 등을 말하는 순간을 말하고 있습니다. 2.6 GB 대신 당신이 얻을 있는지 확인하면 활성 memory.Not에서 스왑 내가 mean.Anyway, 당신의 대답을 주셔서 감사합니다
Balchev

이것은 분명하다. 이 주석의 예를 질문에 추가해야 할 수도 있습니다. 관찰 한 내용에 대한 적절한 설명을 제공 할 수있는 추가 정보를 추가했습니다.
m000

원래 답변을 편집할지 확실하지 않습니다. 다른 경우를 설명하고 (의견 직전에 질문을받지 못했기 때문에) 사람들을 혼란스럽게 할 수 있습니다.
m000

Radoo는 그의 의견에서 "OS X는 배고픈 짐승입니다"라고 말합니다. OS X가 많은 메모리가 부족하다고 생각하지 않았으며 (Lion 및 현재 Mountain Lion 모두) 여기에 비린내가 있다고 생각합니다. 업데이트 된 답변에 감사드립니다.
Balchev

6

충분한 램이 있으면 페이징을 안전하게 비활성화 할 수 있습니다.

다음 명령을 시도하십시오.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

그런 다음 다시 시작하고 dynamic_pager 프로세스가 더 이상 실행되고 있지 않은지 확인하십시오.

에 스왑 파일이 생성되지 않았는지 확인하십시오 /private/var/vm/.

다시 활성화하려면 다음 명령을 시도하십시오.

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

또한 Spotlight를 비활성화하여 더 많은 램을 확보하고 디스크 작업을 줄일 수 있습니다. 다음 명령은 Spotlight를 비활성화 및 활성화하는 데 사용됩니다.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

OSX에서 스왑을 비활성화하면 시스템의 예기치 않은 동작으로 이어질 수 있으며 네트워크를 읽습니다. 이것이 사실입니까?
Balchev

당신의 기억이 부족하면 그것은 것입니다. 그러나 8Gb와 같은 충분한 메모리가 있으면 아무런 문제가 없습니다.
arundevma

2
"8Gb와 같은 충분한 메모리"– 미안, 너무 귀엽다… :)
Bombe

0

할 수있는 일이 많지 않습니다. 왜 그런가요? OS X의 작동 방식 때문입니다. 흥미로운 부분은 Mac이 잠들 때마다 점유 된 메모리가 커지는 방법입니다.

당신은 무엇을 할 수 있나요:

  1. RAM을 업그레이드하십시오.
  2. 거룩한 " purge "명령을 실행하여 필요할 때마다 대부분의 비활성 메모리를 정리하십시오.
  3. 스왑 비활성화 http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

안녕하세요, 퍼지 명령을 사용했지만 대부분 "비활성"메모리의 절반보다 적은 여유 공간을 확보했습니다. OSX에서 스왑을 비활성화하면 시스템의 예기치 않은 동작이 발생하고 충돌 할 수 있다는 것을 읽었습니다 .1) 이제 16GB로 괜찮습니다. 귀하의 답변
Balchev

Macbook Pro에 16GB가 있는데 서버가 아닙니다. :) 잘 알려진 OS X는 메모리에 관해서, 특히 여러 개의 미드 / 빅 앱이 동시에 사용될 때 배고픈 짐승입니다. 이미지 / 비디오 편집 소프트웨어, 일부 게임 및 작은 앱을 열지 않고도 16GB를 모두 채울 수있었습니다. 비활성 메모리는 약 4GB입니다.

또한 많은 OS X 앱이 이미 64 비트임을 고려해야합니다. 64 비트 앱은 주소 공간이 커짐에 따라 32 비트 앱보다 더 많은 메모리를 할당합니다.

0

시스템이 설계된대로 작동합니다. 메모리가 부족한 경우에도 폐기 할 수 없지만 최근에 시스템이 사용 중이 아닐 때 스왑하는 데 사용되지 않은 일부 페이지를 작성하는 것이 좋습니다. 이렇게하면 나중에 메모리 부족이 발생하면 시스템이 사용 중일 때 스왑을 위해 쓰지 않아도이 페이지를 RAM에서 제거 할 수 있습니다.


1
그때는 잘못 설계되었습니다. 스왑 공간을 할당하고 사용하는 데 너무 공격적입니다.
mendota

왜 중요한가요? 사용 가능한 스왑이 많으면 스왑 공간을 할당해도 무해합니다. 할당을 제거하는 데 비용이 들지 않기 때문에 스왑에 필요한 데이터가 포함되어 있지 않은 경우 특히 그렇습니다. 이것은 좋은 설계입니다. 시스템에 압력을 가할 때 나중에 연기하지 않고 거의 비용이 들지 않을 때 열심히 일합니다.
David Schwartz

2
너무 공격적 일 때 디자인이 좋지 않으며 실수로 태그가 비활성화되어 스왑으로 이동하기 시작하는 프로그램에서 끊김 또는 끊기를 유발합니다. 한편 또 다른 여덟 연주회는 RAM에서 무료있다 : /
mendota

나는 mendota에 동의합니다. 스왑을 완전히 비활성화하면 시스템이 끊김없이 원활하게 실행됩니다.
Anton Kuzmin

@AntonKuzmin이 질문의 내용과는 전혀 관련이 없습니다. 이 질문을 읽으면 말더듬이나 문제에 대해 아무 것도 말하지 않습니다.
David Schwartz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.