리소스 모니터와 작업 관리자의 총 RAM 사용량이 총 실제 메모리 사용량에 원격으로 추가되지 않는 이유는 무엇입니까? [복제]


30

작업 관리자 나 리소스 모니터에 의해보고 된 RAM 사용량 이 실제 사용량보다 훨씬 적은 양인 것 같습니다 .

예를 들어, 랩톱이나 데스크탑에서 여러 번 사용중인 7GB를 보았지만 작업중인 RAM 세트의 총 수는 3GB와 비슷합니다. 어디에서 사용되고 있는지 알 수 없습니다!

다음은 오늘 서버의 리소스 모니터에서 확인한 극단적 인 예입니다.

리소스 모니터
전체 크기를 보려면 클릭

이미지를 마우스 오른쪽 단추로 클릭하고 새 탭에서 열고 숫자를 보면 실제 세트 (비 물리적 가상 메모리는 포함되지 않음)가 약 1.7GB까지 추가 된 것을 알 수 있습니다. "모든 사용자의 프로세스 표시"가 활성화 된 경우 작업 관리자에서 RAM 사용량을 추가하여 비슷한 숫자를 얻습니다.

다음은 작업 관리자의 성능 탭 스크린 샷입니다.

작업 관리자
전체 크기를 보려면 클릭

이것은 7.6GB의 실제 메모리가 사용 중임을 나타냅니다.

필자는 개인용 컴퓨터, 랩톱 및 이제 서버에서 항상이 정보를 확인합니다. 시스템 도구에서보고 한 총 RAM 사용량은 관찰 한 RAM 사용량의 약 1/4 만 차지합니다. WTF가 진행되고 있습니까 ???

모든 RAM이 어디에 있는지에 대한 만족스러운 설명이 있습니까? 무슨 일이 일어나고 있으며 왜 흔적이 남지 않습니까?

편집 : 다음은 사용자가 요청한 그래픽 RAM 사용 사진입니다.

램지도 사용
전체 크기를 보려면 클릭

편집 2 : James의 응답 poolmon.exe에 따라 크기별로 정렬 된 비 페이징 프로세스 그림이 있습니다.

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

이 결과는 혼란 스럽습니다. poolmon6GB의 비 페이징 풀이 사용 중이지만 모든 비 페이징 풀 프로세스의 크기는 8MB보다 작습니다.

이것이 무엇을 의미할까요? 되어 poolmon비 페이징 풀을 사용하여 프로세스의 일부를 감지하지 못하는?



리소스 모니터> 메모리 탭 (색상과 숫자가있는 맨 아래 부분)의 사진을 게시 할 수 있습니까? 그것은 더 말할 것입니다.
whs

2
@Ramhound : 해당 링크를 알려 주셔서 감사합니다! 불행히도 방금 요청한 것처럼 Resource Monitor의 Physical Memory 그래픽 맵 사진을 업로드했으며 실제 메모리의 Standby 부분은 총 RAM 사용량의 2 % 미만입니다. David Schwartz의 답변에 따르면 "숨겨진"RAM 사용은 대기 RAM (즉, 캐시 된 데이터에 사용되는 RAM과 사용되지 않는 코드)에서 나 왔으며 여기에는 해당되지 않습니다. 따라서 데이비드의 대답이 무슨 일인지 설명하지는 않습니다.
DumpsterDoofus

RamMap 프로그램을 사용하고 더 자세히 살펴보십시오. 지금까지는 드라이버가 될 것입니다. 그러나 실제로 대기 (캐시)가 아닙니다. 램을 고치기 위해 컴퓨터를 늦추거나 컴퓨터 속도를 높이는 특수 프로그램을 실행합니까? 컴퓨터에 특별한 이상한 드라이버 항목이 있습니까?
Psycogeek

2
"이전에 답변 된"링크는이 경우를 다루지 않습니다.
Jamie Hanrahan

답변:


30

죄송합니다,이 답변이 flippant 반응처럼 들립니다.하지만 귀하의 제목에있는 질문에 대한 답변은 "그들이해서는 안되기 때문에"입니다.

또는 더 정중하게 말하자면 : 프로세스의 개인 작업 세트에없는 RAM이 많이 사용됩니다. 일부는 프로세스의 공유 작업 세트에 있지만 공유로 인해 실제 사용에 대한 신뢰할만한 개념을 얻을 수는 없습니다. 프로세스 수를 더하면 결과가 너무 커집니다.

비 페이징 풀, 페이징 풀의 상주 부분 및 기타 커널 공간 사용의 상주 부분과 같이 RAM을 차지하는 다른 항목은 작업 관리자의 "프로세스"디스플레이에 전혀 표시되지 않습니다.

특정 문제와 관련하여 :

작업 관리자 화면에서 "커널 메모리"섹션을 참조하십시오. 6GB의 "비 페이징 메모리"(비 페이징 풀)가 있습니다. 두 번째 그래프에서 "사용 중"섹션의 일부입니다. 비 페이징 풀은 어떤 프로세스에도 청구되지 않으므로 작업 관리자에서 프로세스 당 숫자를 더하는 것이 사용중인 총계에 근접하지 않습니다. 일부 드라이버가이를 사용하고있을 가능성이 높습니다. 이것은 전적으로 과도한 금액입니다. 1GB 미만이어야합니다. 비 페이징 풀 사용의 과도한 부분을 담당하는 모든 드라이버는 의심 할 여지없이 버그가 있습니다.

RAMmap에서이를 확인할 수 있습니다 ( "카운트 사용"탭에서 "비 페이징 풀"의 총계 확인). 원인이되는 드라이버를 찾는 데 도움이되지 않습니다.

찾는 방법은 다음과 같습니다. Microsoft 도구 "poolmon"의 사본을 구하십시오. Windows 드라이버 키트와 함께 배포되는 문자 모드 도구입니다. Windows 7의 경우 WDK는 무료로 다운로드 할 수 있습니다. 전체 내용 (ISO)을 다운로드하여 설치해야하지만 원하는 경우 도구 만 설치하도록 선택할 수 있습니다.

WDK 디렉토리에서 poolmon을 찾으십시오. 올바른 32 비트 또는 64 비트를 선택하고 관리자 명령 프롬프트에서 실행하십시오. 다음과 같은 표시가 나타납니다.

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

"Type"열에 "Nonp"만 표시 될 때까지 "p"키를 누르십시오 (아니, 농담이 아닙니다. 메뉴가 없습니다!). 그런 다음 "b"(필요한 경우 두 번)를 눌러 Bytes 열을 기준으로 내림차순으로 디스플레이를 정렬하십시오 (여기서는 샘플에서 이미 수행됨).

그런 다음 맨 위 줄의 "태그"열을보십시오. 여기에 표시된 (분명히 인공적인) 경우에는 "누설"입니다. (이 시스템은이 문제를 유발하기 위해 고의적으로 버그가 발생한 드라이버를 실행 중입니다. 비 페이징 풀 "누수"입니다.

btw에서 강조 표시된 줄은 이전의이 고풍 화면으로 업데이트 한 이후 변경된 줄입니다.

이제 c : \ Windows \ System32 \ Drivers에서 해당 문자열이 포함 된 .sys 파일을 검색하십시오. 이 경우 다음과 같이 "누설"을 찾으십시오.

c:\windows\system32> findstr /s Leak *.sys

그런 다음 웹에서 해당 문자열 및 / 또는 해당 드라이버 이름에 대한 참조를 검색하십시오.

여기로 돌아와 .sys 파일에서 전체 이름, 제조업체 이름 등을보고하면 도움이됩니다.

(내가 내기하는 태그는 ECMC이고 드라이버는 intmsd.sys이며 ExpressCache 또는 IntelliMemory라는 제품과 관련이 있다는 것입니다. 해당 제품을 "제거"합니다. 문제를 해결하기위한 업데이트가 있지만 고정 버전을 사용하면이 제품으로 시스템 성능이 향상되는 것을 본 적이 없으며 Windows에 이미있는 기능을 본질적으로 복제합니다.)

그런 식으로 찾을 수 없으면 다음 단계는 "Windows Performance Toolkit"을 사용하는 것입니다. 사용법에 대해서는 magicandre1981의 답변과 함께이 포럼에서 해당 문자열을 검색하십시오. xperf에 대한 답변은 무시하십시오. 이전 버전의 도구입니다.

업데이트 : 의견에 따르면, OP는 위의 작업을 수행했으며 poolmon이 비 페이징 풀의 총 크기가 실제로 큰 것으로보고했지만 할당 된 모든 조각이 분명히 작다는 것을 알았습니다. 내 의견 (또한 의견에 있음)은 이것이 "부풀린"풀이라고 부릅니다. 풀이 할당 된 다음 해제되었지만 풀에 할당 된 RAM의 양이 "해제"를 반영하기 위해 축소되지 않았습니다. . magicandre 가이 답변 에 설명 된 절차를 따르면 범인을 식별 할 수 있습니다.


다른 사람들보다 더 조사해 주셔서 감사합니다! 나는 poolmon시간이 있다면 오늘 사용하여 누출을 찌르고 답을 더 자세히 읽고 이해하도록 노력할 것입니다. 메모리 누수가있을 가능성이 있습니까? 그렇다면 약간의 메모리 누수가 발생하는 것으로 알려진 소프트웨어를 개발하고 있기 때문에 이는 전적으로 그럴듯합니다.
DumpsterDoofus

@DumpsterDoofus : 예. 커널 모드 드라이버에서 메모리 누수가있을 수 있습니다. 이것은 앱의 메모리 누수와 다릅니다.
Jamie Hanrahan

그래서 마침내 poolmon.exe문제의 서버에서 실행 하고 스크린 샷을 포함하도록 내 질문을 편집했습니다. poolmon내 작업 관리자 스크린 샷에서 지적한 것처럼 6GB의 비 페이징 풀이 있지만 "Nonp"프로세스 만보고 크기별로 정렬하면 모두 작습니다 (가장 큰 크기는 8MB). poolmon비 페이징 풀 사용량의 대부분을 감지하지 못하는 이유 가 있습니까?
DumpsterDoofus

2
아 .. 여기서 문제는 "사용법"이라는 단어입니다. 따라서 6GB의 비 페이징 풀이 있지만 현재 일부 풀만 사용중인 것 같습니다. 아 아아아 아아아 아아 진 아무것도 (TM이 아닌, poolmon이 아니라 RAMmap이 아님) 실제로 사용중인 풀의 양을 보여줍니다. 내 생각에 한 번에 많은 풀 사용자가 있었으므로 풀을 확장하여 풀을 확장 한 다음 무거운 사용자가 사라졌습니다. 풀이 처리되는 방식으로 인해 할당이 연속 된 큰 청크에 있지 않는 한 일단 할당 된 RAM을 해제하는 것은 쉽지 않습니다. 시스템을 새로 시작한 후 이것을 볼 것을 제안합니다.
Jamie Hanrahan

Server 2003 용 지원 도구 ( serverfault.com/questions/84479/… )에 사용 가능한 poolmon.exe 버전이 약간 오래되었지만 5.2MB 다운로드에 불과하지만 여전히 서버 2016에서 실행됩니다.
mwfearnley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.