2016-07-04 4 views
2

특정 프로세스의 메모리 양이 페이지 아웃되었음을 나타내는 성능 카운터가 있습니까? 40GB의 사용 가능한 RAM (128GB 실제 메모리)이있는 서버가 있지만 페이징 된 데이터 양은 100GB 이상입니다. 거대한 페이지 파일 사용에 대한 책임이있는 프로세스를 어떻게 알 수 있습니까?프로세스의 메모리 양은 페이지 아웃됩니까?

페이지 아웃 활동이 발생하는 것을 확인하려면 xperf 추적을 사용하는 것이 좋습니다. 하지만 페이지 파일에 대한 많은 기록을 제외하고는 어떤 프로세스에서 메모리가 페이지 파일에 기록되는지 알 수 없습니다.

참조 설정 추적은 내 프로세스의 실제 메모리 소비가 얼마나 큰지 알기까지만 표시합니다. 그러나 페이지 아웃 활동을 추적하지 않는 것 같습니다.

업데이트 OS는 R2

윈도우 서버 2012입니다
+1

나는 그것이 사고라고 확신하지만 운영 체제에 대해서는 언급하지 않았습니다. 그 대답을 통해 그걸 안다 : – Makketronix

답변

1

ETW 제공자 "Microsoft-Windows-Kernel-Memory"의 키워드는 "KERNEL_MEM_KEYWORD_WS_SWAP" ("0x80")입니다. 당신이 액세스 페이지의 번호와 같은 일부 데이터 (PagesProcessed) 얻을 여기

 <event value="4" symbol="WorkingSetOutSwapStart" version="0" task="WorkingSetOutSwap" opcode="win:Start" level="win:Informational" keywords="KERNEL_MEM_KEYWORD_WS_SWAP" template="WorkingSetOutSwapStartArgs"/> 
    <event value="4" symbol="WorkingSetOutSwapStart_V1" version="1" task="WorkingSetOutSwap" opcode="win:Start" level="win:Informational" keywords="KERNEL_MEM_KEYWORD_WS_SWAP" template="WorkingSetOutSwapStartArgs_V1"/> 
    <event value="5" symbol="WorkingSetOutSwapStop" version="0" task="WorkingSetOutSwap" opcode="win:Stop" level="win:Informational" keywords="KERNEL_MEM_KEYWORD_WS_SWAP" template="WorkingSetOutSwapStopArgs"/> 
    <event value="5" symbol="WorkingSetOutSwapStop_V1" version="1" task="WorkingSetOutSwap" opcode="win:Stop" level="win:Informational" keywords="KERNEL_MEM_KEYWORD_WS_SWAP" template="WorkingSetOutSwapStopArgs_V1"/> 
    <event value="6" symbol="WorkingSetInSwapStart" version="0" task="WorkingSetInSwap" opcode="win:Start" level="win:Informational" keywords="KERNEL_MEM_KEYWORD_WS_SWAP" template="WorkingSetOutSwapStartArgs"/> 
    <event value="6" symbol="WorkingSetInSwapStart_V1" version="1" task="WorkingSetInSwap" opcode="win:Start" level="win:Informational" keywords="KERNEL_MEM_KEYWORD_WS_SWAP" template="WorkingSetOutSwapStartArgs_V1"/> 
    <event value="7" symbol="WorkingSetInSwapStop" version="0" task="WorkingSetInSwap" opcode="win:Stop" level="win:Informational" keywords="KERNEL_MEM_KEYWORD_WS_SWAP" template="WorkingSetInSwapStopArgs"/> 

: 여기에 데이터가 페이지 아웃 때 발생하는 몇 가지 이벤트가/페이지 인 그것으로

<template tid="WorkingSetOutSwapStartArgs"> 
    <data name="ProcessId" inType="win:UInt32"/> 
</template> 
<template tid="WorkingSetOutSwapStopArgs"> 
    <data name="ProcessId" inType="win:UInt32"/> 
    <data name="Status" inType="win:HexInt32"/> 
    <data name="PagesProcessed" inType="win:UInt32"/> 
</template> 
<template tid="WorkingSetInSwapStopArgs"> 
    <data name="ProcessId" inType="win:UInt32"/> 
    <data name="Status" inType="win:HexInt32"/> 
</template> 
<template tid="WorkingSetOutSwapStartArgs_V1"> 
    <data name="ProcessId" inType="win:UInt32"/> 
    <data name="Flags" inType="win:HexInt32"/> 
</template> 
<template tid="WorkingSetOutSwapStopArgs_V1"> 
    <data name="ProcessId" inType="win:UInt32"/> 
    <data name="Status" inType="win:HexInt32"/> 
    <data name="PagesProcessed" inType="win:Pointer"/> 
    <data name="WriteCombinePagesProcessed" inType="win:Pointer"/> 
    <data name="UncachedPagesProcessed" inType="win:Pointer"/> 
    <data name="CleanPagesProcessed" inType="win:Pointer"/> 
</template> 

재생이 경우 필요한 모든 데이터가 포함됩니다.

+0

이 공급자는 멋지지만 스왑 아웃 이벤트는 프로세스 작동 세트를 스왑 아웃하라는 API 호출을 통해 누군가가 강제로 트리거되는 경우에만 트리거됩니다. 일반 작업 세트 트림 활동은이 제공자에 의해 기록되지 않습니다.여전히 응용 프로그램 자체에서 트리거 된 최소한의 스왑 아웃을 추적하는 것이 좋습니다. –

0
당신이 Hard Faults 찾고 싶을 Xperf에서

-이 Page Fault의 일종이지만, 페이지 오류가 종종 드라이브를 건드리지 않고 소프트웨어에서 처리 할 수 ​​있습니다 . 작업 관리자에서 열을 추가하여 각 프로세스에 대한 페이지 오류를 표시 할 수 있습니다.

https://technet.microsoft.com/en-us/sysinternals/vmmap.aspx과 같은 도구를 사용하면 프로세스 주소 공간에있는 각 메모리 블록과 커밋 된 메모리 양을 알 수있는 도구를 사용하여 프로세스에 대한 정보를 얻을 수 있습니다. 그러나 페이징 될 수있는 커밋 된 메모리이며 VirtualQueryEx()은 그것에 대해 알려주지 않습니다.

많은 양의 페이징 된 메모리가 항상 나쁜 것은 아니라는 점도 유의해야합니다. 느린 하드 오류입니다.

편집 : 흠, 방해가되는 일회성 테스트를 원한다면 HardQueryEx()와 ReadProcessMemory()를 결합하여 프로세스의 모든 커밋 된 페이지를 터치하는 해킹 옵션이 있다고 생각합니다. 따라서 하드 결함을 계산할 수 있습니다!

+0

나는 단단한 페이지 결함을 안다. 이것은 페이지 파일에서 메모리 페이징을위한 것입니다. 그러나 프로세스와 언제 페이지 파일로 페이징되는지 알기를 원합니다. 아마도 누군가가 작업 세트를 명시 적으로 정리하고 나중에 그의 프로세스가 응답 시간이 너무 긴 이유를 궁금해 할 것입니다. –

+0

나는 이것이 중요한 정보라는 것에 동의합니다. 나는 과거에 얼마나 많은 메모리 압박이 있었는지를 보여주는 작업 관리자에서 이것을보고 싶다. 내가 제공 할 수있는 가장 좋은 근사값은 작업 집합을 커밋 크기와 비교하는 것입니다. 그러나 불일치는 아직 처리되지 않았거나 이미지 파일로 페이징되었거나 페이지 파일로 페이징 된 페이지에서 발생할 수 있으므로 불완전합니다 . 페이징 된 메모리가 * 결국 * 나쁜 것입니다. –