사용 가능한 메모리가 많을 때 Windows 10 메모리 부족 경고

사용 가능한 메모리가 많을 때 Windows 10 메모리 부족 경고

시스템을 재부팅하지 않고 며칠 동안 작동시키면 "정보 손실을 방지하려면 프로그램을 닫으세요"라는 경고 메시지가 나타난 다음 프로그램을 닫으라는 대화 상자가 표시되는 문제가 있었습니다. 이 대화 상자는 취소하거나 누를 수 있습니다. "프로그램 닫기"를 선택하면 Windows가 대화 상자에 나열된 응용 프로그램 중 일부 또는 전부를 강제로 닫습니다.

작업 관리자를 열고 현재 메모리의 약 30%만 사용되고 있는 것을 확인합니다.

활용도 33%

특정 응용 프로그램에서 사용되는 커밋된 메모리의 양을 확인하기 위해 리소스 모니터를 열면 여전히 상대적으로 낮은 메모리 사용량이 표시됩니다.

리소스 모니터

나는 한동안 이 문제를 겪었고 해결책을 찾기 위해 애썼습니다. 나는 poolmon을 사용하여 드라이버 누출과 같은 원인을 조사했지만 다른 사람들이 드라이버 메모리 누출에 대한 위험 신호로 설명한 것과 일치하는 항목을 poolmon에서 본 적이 없습니다. 나를 특히 혼란스럽게 만드는 것은 시스템 메모리의 33%만 사용되고 있을 때 Win10에서 응용 프로그램을 닫으라고 말하는 이유입니다.

답변1

여기서는 추측이 가능합니다.

누군가의 무작위 "최적화" 조언에 따라 스왑 파일을 비활성화했습니다.

연속적인 물리적 RAM의 큰 블록을 원하는 일종의 OS 드라이버가 있습니다. 하지만 시간이 지남에 따라 모든 물리적 RAM이 조각화되었기 때문에 이를 얻을 수 없습니다. 그리고 스왑 파일이 비활성화되어 있기 때문에 RAM 조각 모음을 수행할 수 없습니다.

스왑 파일을 활성화하십시오.

내가 말했듯이, 추측입니다.

답변2

마지막 Q - 짧은 버전에 대해 설명합니다. 오류 메시지는 "커밋된" 가상 주소 공간에 관한 것입니다. 두 번째 화면 스냅샷의 Commit Charge 그래프를 보면 실제로 한도에 도달했거나 한도에 매우 가깝다는 것을 알 수 있습니다.

"사용 가능", "사용 가능" 또는 "사용 중"인 RAM의 양은 중요하지 않습니다. 특히 "사용 가능한" RAM이 부족하다고 해서 "메모리 부족" 또는 "메모리 부족" 메시지가 나타나는 것은 아닙니다.

커밋 제한은 총 RAM + 페이지 파일 크기와 같습니다. 커밋된 메모리가 할당되면 아직 실제로 사용되지 않은 경우에도 "커밋 요금"으로 즉시 요금이 청구됩니다. 즉, RAM 또는 PF 공간이 즉시 사용되지 않음을 의미합니다. 물리적 공간(RAM이든 페이지 파일이든)은 메모리가 실제로 참조될 때만 사용됩니다. 그때부터 프로그램이 이를 해제하거나 전체 프로세스가 끝날 때까지 어딘가에 있어야 합니다.

예: 페이지 파일이 없으므로 커밋 제한이 16GB(RAM 크기)라고 가정합니다. 이제 8개의 프로세스가 각각 1GB의 VirtualAlloc(MEM_COMMIT)을 시도한다고 가정합니다. 결과: 커밋 요금이 8GB 증가합니다. 그러나 RAM에 즉각적인 영향은 없습니다! 마치 문구점에서 종이 한 장을 샀는데 실제로는 종이 한 장도 얻지 못한 것과 같습니다. 하지만 새 시트가 필요할 때마다 마술처럼 시트가 나타납니다. 패드 전체(할당된 영역의 크기)를 모두 사용할 때까지.

이제 각 프로세스가 실제로 1GB 중 100MB에만 액세스한다고 가정합니다. 사용되는 RAM은 800MB에 불과합니다.

하지만 각각 이후로~할 것 같다1GB를 모두 참조하려면 OS는 8GB의 RAM+페이지 파일 공간을 보장해야 합니다. 음, 페이지 파일이 없는 경우 RAM만... 그런 경우에 대비해 사용할 수 있는 상태로 유지됩니다. 문구점으로 돌아가서 모든 사람에게 이전에 구입한 만큼의 시트를 제공할 수 있을 만큼 충분한 종이 재고를 보유해야 합니다.

따라서 현재 커밋된 양이 한도에 도달하면 OS는 VirtualAlloc(MEM_COMMIT)의 성공을 허용하지 않아야 합니다.

왜? 프로세스는 VirtualAlloc의 결과를 확인하여 성공했는지 확인해야 하기 때문입니다. 일단 그렇게 하고 할당이 성공했음을 확인하면 프로세스는 전체 커밋된 영역에 대한 후속 참조가 성공할 것이라고 기대할 수 있는 모든 권리를 갖습니다.

Windows에서 해당 공간을 실현하는 데 사용할 수 있는 공간을 초과하도록 커밋 요금을 허용한 경우 해당 기대치를 항상 충족할 수는 없습니다.

빠른 해결 방법은 페이지 파일의 기본(=초기) 크기를 늘리는 것입니다. 위의 설명을 통해 오류 메시지가 표시되지 않는 이유를 알 수 있습니다.해당 파일에 아무 것도 기록되지 않더라도. 다시 말하지만, OS는 모든 커밋 요금을 위한 공간을 사용할 수 있도록 보장합니다.필요한 경우를 대비해. 프로세스가 커밋된 메모리를 할당할 때 그들은 단지 "안녕, OS, 나야"라고 말하는 것입니다.~할 것 같다이 정도가 필요합니다." 그렇다고 그들이 실제로 그것을 사용할 것이라는 의미는 아니며, 아직 실제로 사용했다는 의미도 아닙니다.

자세한 내용은 다음을 참조하세요.내 대답은 여기.

지금....프로세스가 합산되지 않는 것 같을 때 그렇게 많은 커밋을 사용하고 있는지는 또 다른 질문입니다. 이를 살펴보려면 작업 관리자의 성능 탭, 메모리 섹션을 표시하십시오.

답변3

또 다른 가능성은 64비트가 아닌 Win10 32비트를 사용하고 있다는 것입니다. 16GB RAM이 설치되어 있지만 4 이상을 실용적으로 사용할 수 있는 32비트 OS 제한이 있습니다. 또한 OS는 물리적 RAM에 관계없이 요청할 수 있는 RAM 양에 대해 /프로세스별로/ 하드 제한을 적용합니다. 그렇다면 64비트 OS로 전환하거나 더 적은 수의 응용 프로그램을 동시에 실행하는 것 외에는 할 수 있는 일이 많지 않습니다.

관련 정보