사용 가능한 메모리가 충분하면 Windows 10 메모리 부족 경고


24

나는 내 시스템이 재부팅되지 않고 며칠 동안 작동하지 않으면 "정보 손실을 막기 위해 프로그램을 닫는다"는 경고를 듣고 프로그램을 닫을 것을 제안하는 대화를 시작합니다. 프로그램을 취소하거나 실행할 수 있습니다 "프로그램 닫기"및 Windows 강제로 대화 상자에 나열된 응용 프로그램의 일부 또는 모든 닫습니다.

작업 관리자를 열어 현재 메모리의 약 30 % 만 사용 중입니다.

33% Utilization

리소스 모니터를 열어 특정 응용 프로그램에서 얼마나 많은 커밋 된 메모리를 사용하고 있는지 확인하지만 상대적으로 낮은 메모리 사용량을 볼 수 있습니다.

Resource Monitor

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


3
작업 관리자로 가서 성능 탭으로 이동하십시오. 무엇이 커밋 된 메모리 필드 쇼?
DrZoo

스크린 샷을 저장하지는 않았지만 커밋 된 메모리는 17.5gb / 19gb와 같이 사용할 수있는 비율이 높았습니다.
Brandon

답변:


14

야생은 여기에서 추측한다.

임의의 "최적화"조언에 따라 스왑 파일을 비활성화했습니다.

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

스왑 파일을 사용하십시오.

내가 말했듯이, 야생의 추측.


음, 최대 3GB의 페이지 파일 크기가 설정되어 있습니다. 이것은 스왑 파일의 의미입니까, 아니면 Windows 10에서 별도로 관리되는 것입니까? 나는 이와 같은 일을 할 수 없다는 것은 불가능하지 않으며, 10/2015 년에이 기계를 처음 만들었을 때 극한의 성능 문제를 겪었고 핵심 주차 공간을 사용하지 못하게하는 등 여러 가지 시도를했습니다. 결국 10 %를 좋아하는 힘을 줄이고 모든 구성 요소를 굶어 죽이는 전원 관리 계획이 끝났습니다. 그래서 전 체계적인 성능 문제가 있었지만, 그 에피소드 중에 말한 것처럼 할 수도 있습니다.
Brandon

1
페이지 파일 크기를 "System Managed"로 변경하면 문제가 사라질 수 있습니다.
Scott Chamberlain

나는 한때 시스템 관리를 해왔고, 여전히 같은 문제가 있었지만, 더 오래 걸릴 것입니다. 필자가 관리하는 시스템에 페이지 파일을 설정하면 64GB를 믿을 때 최대 값을 낼 수 있습니다. 커밋이 너무 높으면 메모리 부족 경고가 계속 발생합니다. 하지만 여전히 70 % 정도의 실제 메모리를 사용할 수 있으며 리소스 모니터에서는 60 + GB 이상의 메모리가 현재 나열된 프로세스에 커밋되었음을 알 수 없습니다.
Brandon

Zan과 Scott과 완전히 동의합니다.이 문제를 일으키는 것은 페이지 파일입니다 ( windowsitpro.com/windows-10/... 이것을 말하는 다른 출처에 대해서도). 이를 시스템 관리로 설정하고 if 문제가 다시 나타나면 조사를 시작합니다.
Ƭᴇcʜιᴇ007

그래서 저는 시스템 관리 페이지 파일이 핵심 답변이라고 생각합니다. 정적 인 3GB로 설정하면 Windows 10 환경에서는 이상적이지 않습니다. 몇 주 전에이 솔루션을 구현하여 정상적인 용도로만 실행되도록하고 리소스 모니터 커밋 된 메모리 열에서 차지하는 것보다 훨씬 많은 커밋 된 메모리를 볼 수 있지만 메모리가 부족하지는 않습니다. 지금 경고 또는 문제점.
Brandon

15

마지막 Q를 다시하십시오 - 짧은 버전 : 오류 메시지는 "커밋 된"가상 주소 공간에 대한 것입니다. 두 번째 화면 스냅 샷에서 Commit Charge 그래프를 보면 실제로 한계에 도달했음을 알 수 있습니다.

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

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

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

이제 각 프로세스가 실제로 1GB에서 100MB 만 액세스한다고 가정합니다. 사용 된 RAM은 800MB입니다.

그러나 각자 그것의 1GB 전부를 참조하십시오, OS는 8GB의 RAM + 페이지 파일 공간을 보장해야합니다 ... 글쎄, 페이지 파일이없는 경우의 RAM만이 가능한 경우에 대비하여 유지됩니다. 문구점으로 돌아가서, 그들은 이전에 구입 한만큼의 시트를 모든 사람들에게 줄 수있을만큼 충분한 종이를 재고 할 필요가 있습니다.

따라서, OS는 VirtualAlloc (MEM_COMMIT)이 커밋 된 현재 양이 한계에 도달 할 때 성공하는 것을 중지해야합니다.

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

Windows가 커미션 요금이 해당 공간을 인식 할 수있는 공간의 양을 초과하도록 허용 한 경우, 그 기대치는 항상 충족 될 수는 없습니다.

빠른 해결 방법은 페이지 파일의 기본 (= 초기) 크기를 늘리는 것입니다. 위의 설명에서 오류 메시지가 표시되지 않는 이유를 알 수 있어야합니다. 비록 그 파일에 아무것도 쓰여지지 않을지라도 . 다시 말하지만, OS는 모든 커미트 비용을위한 공간이 확보되도록 보장합니다. 필요하다면 . 프로세스가 커밋 된 메모리를 할당 할 때 그들은 단지 "헤이, OS, 나 이것을 많이 필요로합니다. "그렇다고해서 실제로 사용하게 될 것은 아니며, 실제로 사용했음을 의미하는 것은 아닙니다.

자세한 내용은 다음을 참조하십시오. 내 대답은 여기에 .

지금.... 당신은 당신의 프로세스가 그것에 추가되지 않는 것처럼 커밋을 많이 사용하고 있습니다. 또 다른 질문입니다. 보고 시작하려면 작업 관리자의 성능 탭, 메모리 섹션을 표시하십시오.


저는 완벽한 답을 묘사 할 말이 없습니다. 고맙습니다.
Vinicius Tavares

-2

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


2
Win10 32 비트를 실행하고 작업 관리자가 OQ에서와 같이 총 16GB를 표시하도록하는 것은 불가능합니다. 그리고 btw, 프로세스 당 OS 포즈는 RAM이 아닌 가상 메모리에 있습니다. RAM을 할당하기 위해 Windows에서 호출 할 수있는 호출이 없습니다. 본질적으로 . (글쎄, AWE,하지만 그건 관리자 수준의 권한을 필요로하고 거의 시스템 프로그램을 제외하고는 아무것도 사용하지 않습니다.) 가상 주소 공간을 할당하고 (예 : VirtualAlloc) 사용하십시오. 당신이 그것을 사용할 때, OS는 당신의 프로세스에 RAM을 할당한다 ( "demand paging"). 그러나 물론 모든 것을 한 번에 RAM에서 실현해야하는 것은 아닙니다.
Jamie Hanrahan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.