Windows가 항상 설치된 RAM만큼의 가상 메모리를 사용하는 이유는 무엇입니까?

Windows가 항상 설치된 RAM만큼의 가상 메모리를 사용하는 이유는 무엇입니까?

그리고 왜 그 금액의 최대 두 배를 갖고 싶어합니까? 내 시스템에는 32GB의 RAM이 있고 Windows에서는 기본적으로 최소 16MB의 가상 메모리를 설정하고 32GB(!)를 할당하며 50GB(!!)를 권장합니다. 64GB RAM 시스템에서는 100GB 이상을 할당하도록 권장했지만 RAM에서 사용할 수 있는 것과 동일한 양인 64GB를 다시 "만" 사용했습니다.

내가 페이지 파일의 개념을 이해하는 한 Windows는 필요할 때만 페이지 파일을 확장하고 최소 크기로 시작하지만 결코 그렇지는 않지만 항상 절대 최대 크기로 들어간다는 것입니다. 페이지 파일을 비활성화하거나 설치된 RAM의 양과 동일하게 설정하지 않으면 7zip과 같이 많은 메모리를 사용하는 일부 프로그램에서 문제가 발생하기 때문에 이는 매우 짜증나는 일입니다. 메모리가 충분함에도 불구하고 할당할 메모리가 충분하지 않다고 주장하기 때문입니다. 사용 가능한 메모리의 수입니다.

이 동작은 잠재적으로 드라이브(SSD)의 수명을 엄청나게 단축시킵니다. Windows에서 이 작업을 수행하는 이유는 무엇이며 어떻게 방지할 수 있습니까? 아니면 일부 프로그램에서 이상한 동작을 일으키지 않고 페이지 파일을 완전히 비활성화할 수 있는 방법도 있습니다.

답변1

첫째, 페이지 파일 크기를 설정하는 Windows의 대화 상자에서 페이지 파일을 "가상 메모리"와 동일시하는 것은 (당신의 실수가 아닌) 큰 실수입니다. 페이지 파일은 개인 커밋 메모리에서 사용되는 가상 주소 공간의 한 범주에 대한 백업 저장소일 뿐입니다. 다른 파일(매핑된 파일)에 의해 지원되는 가상 주소 공간이 있고 항상 페이징할 수 없어 항상 RAM에 유지되는 VAS가 있습니다. 그러나 적어도 가상 주소에서 RAM 주소로의 변환이 항상 작동한다는 점에서는 모두 "가상 메모리"입니다.

귀하의 관찰은 정확합니다. Windows의 페이지 파일 크기 할당은 기본값 = RAM 크기, 최대 = 그 두 배라는 간단한 계산을 사용합니다. (예전에는 1.5x, 3x였습니다.) 무언가로 설정해야 하며 이러한 요소는 거의 항상 충분한 결과를 제공합니다. 또한 시스템이 충돌하는 경우(커널 또는 전체 덤프를 활성화했다고 가정) 메모리 덤프를 포착할 수 있는 충분한 페이지 파일 공간을 보장합니다.

내가 페이지 파일의 개념을 이해하는 한 Windows는 필요할 때만 페이지 파일을 확장하고 최소 크기로 시작하지만 결코 그렇지는 않지만 항상 절대 최대 크기로 들어간다는 것입니다.

아... "초기 크기"부터 시작되는군요. 이것은 "허용되는 최소값"이 아닙니다. 이것이 Windows가 RAM 크기를 초기 크기로 사용하기 때문에 RAM 크기로 표시되는 이유입니다.

그런데... 실제 페이지 파일 크기가 최대 설정으로 표시된다는 말씀이신가요? 예를 들어 초기 16GB, 최대 32GB로 설정된 경우 실제 크기("현재 할당됨")가 32GB로 표시됩니까? 재부팅하면 항상 초기 크기로 되돌아가야 합니다.

"시스템의 가상 메모리가 부족합니다" 팝업이 표시됩니까? 왜냐하면 OS가 페이지 파일을 현재 크기 이상으로 확장할 때 그래야 하기 때문입니다.

무언가가 실제로 너무 많은 개인용 커밋 메모리를 할당하려고 시도하여 해당 항목을 저장하기 위해 확대된 페이지 파일 공간이 필요한 경우가 아니면 OS는 페이지 파일을 확대하지 않습니다. 하지만 어쩌면 뭔가가 있었을 수도 있습니다. 작업 관리자의 프로세스 탭을 살펴보세요. "커밋 크기" 열에는 각 프로세스에 대한 크기가 표시됩니다. 돼지가 누구인지 보려면 열 제목을 클릭하세요. :)

페이지 파일을 비활성화하거나 설치된 RAM의 양과 동일하게 설정하지 않으면 7zip과 같이 많은 메모리를 사용하는 일부 프로그램에서 문제가 발생하기 때문에 이는 매우 짜증나는 일입니다. 메모리가 충분함에도 불구하고 할당할 메모리가 충분하지 않다고 주장하기 때문입니다. 사용 가능한 메모리의 수입니다.

이는 사용 가능한 RAM이 아니라 "커밋 요금" 및 "커밋 제한"과 관련이 있습니다. "커밋 제한"은 (RAM - 페이징할 수 없는 가상 메모리) + 현재 페이지 파일 크기의 합계입니다. (여유 RAM이 아니라 RAM만 있습니다.) 따라서 8GB RAM과 16GB 현재 페이지 파일이 있는 시스템의 커밋 제한은 약 24GB입니다(페이징할 수 없는 콘텐츠를 보유하는 RAM은 커밋 제한에 포함되지 않기 때문에 "대략"). .

"커밋 요금"은 현재 시스템에 존재하는 개인 주소 공간의 양입니다. 이는 커밋 제한보다 작아야 합니다. 그렇지 않으면 시스템이 해당 항목이 있을 위치를 보장할 수 없습니다.

작업 관리자의 성능 탭에서 "커밋(GB)" 범례와 함께 이 두 숫자를 볼 수 있습니다. 예를 들어 "Commit (GB) 1/15"라고 적힌 컴퓨터를 보고 있습니다. 이는 15GB 제한 중 1GB의 현재 커밋 요금입니다.

7zip과 같은 프로그램이 예를 들어 크기가 (commitLimit - commitCharge)인 VirtualAlloc, 즉 "나머지" 커밋 제한보다 큰 작업을 시도하는 경우 OS가 커밋 제한을 충분히 크게 만들기 위해 페이지 파일을 확장할 수 없는 경우 할당 요청이 실패했습니다. 그것이 바로 여러분이 보고 있는 일입니다. (Windows에는 실제로 사용자 모드 액세스가 아닌 "물리적 메모리 부족"에 대한 오류 메시지가 없습니다! 가상에만 해당됩니다.)

그것은 아무 관련이 없습니다무료RAM은 모든 RAM(페이징할 수 없는 작은 비트 제외)이 현재 무료인지 여부에 관계없이 커밋 제한에 포함됩니다.

이러한 할당 실패 후 시스템을 보면 분명히 잘못된 것이 없기 때문에 혼란스럽습니다. 시스템을 보면 커밋 요금이 한도보다 훨씬 낮고 사용 가능한 RAM이 많을 수도 있습니다. 문제가 무엇인지 확인하려면 프로그램이 할당하려고 시도한 전용 커밋 메모리의 양을 알아야 합니다. 그리고 대부분의 프로그램은 당신에게 말하지 않을 것입니다.

7zip이 vas 할당을 시도하는 데 너무 공격적이라고 생각됩니다. 아마도 RAM 크기에 따라 요청을 확장하고 있습니까? 7zip이 만족할만한 더 작은 페이지 파일 설정이 없다고 확신합니까? 7-zip의 32비트 또는 64비트 버전을 사용하고 있습니까? 32비트 버전을 사용하면 2GB 또는 3GB 이상의 가상 주소 공간을 사용할 수 없으므로 이 문제가 해결됩니다. 물론 대규모 데이터세트에서는 속도가 그리 빠르지 않을 수도 있습니다.

이 동작은 잠재적으로 드라이브(SSD)의 수명을 엄청나게 단축시킵니다.

글쎄, 아니, 그렇지는 않아. 단순히 크기에 관계없이 페이지 파일을 배치한다고 해서 시스템이 실제로 페이지 파일에 그만큼 많이 쓴다는 의미는 아닙니다. ("종료 시 페이지 파일 지우기" 옵션을 설정하지 않은 경우에도 전체 내용을 기록한다고 생각하지 않습니다. Mm은 어떤 블록이 사용 중인지 알고 있으며 그 블록만 작성해야 합니다... 저는 생각해 본 적이 없습니다. 그 전에 확인해 봐야겠습니다.)

페이지 파일에 실제로 얼마나 많은 내용이 있는지 확인하려면 PerfMon 유틸리티를 사용하세요. 페이지 파일에 대한 카운터 그룹이 있으며 물론 "사용률%" 카운터가 필요합니다. 파일의 실제 크기에 따라 이 비율을 해석하십시오(탐색기에 표시됨).

이는 많은 공간을 사용하며 SSD의 공간은 매우 귀중하기 때문에 이는 우리 대부분의 관심사입니다. 시도해 볼 수 있는 한 가지 방법은 SSD에 4GB 또는 8GB와 같은 적당한 크기의 페이지 파일을 넣은 다음 회전하는 러스트 드라이브를 연결하고 그 위에 큰 페이지 파일을 넣는 것입니다. 또는 페이지 파일용으로 SSD만 원하는 경우 두 번째 페이지 파일용으로 저렴한 소형 SSD를 구입하세요.

관련 정보