2016-10-08 1 views
4

2012 R2 서버의 다양한 IIS 응용 프로그램 풀에 대한 메모리 덤프를 캡처하려고 할 때 최근에 문제가있었습니다. 내가 작업 관리자를 사용하여 시도했지만, 그것은 관리 콘솔에서 procdump을 사용뿐만 아니라, 오류가 발생합니다 : 내가 -ma 및 -ma과 -64과 procdump64하지만 그들은 모두의 다양한 조합을 시도덤프 파일을 쓰는 중 오류가 발생했습니다 : 0x80070005 오류 0x80070005 (-2147024891) : 액세스가 거부되었습니다.

PS C:\Users\_______\Downloads> procdump -mA 31016 

ProcDump v7.1 - Writes process dump files 
Copyright (C) 2009-2014 Mark Russinovich 
Sysinternals - www.sysinternals.com 
With contributions from Andrew Richards 

[19:59:22] Dump 1 initiated: C:\Users\____\Downloads\w3wp.exe_161008_195922.dmp 
[19:59:25] Dump 1 writing: Estimated dump file size is 29278 MB. 
[20:01:15] Dump 1 error: Error writing dump file: 0x80070005 
Error 0x80070005 (-2147024891): Access is denied. 

[20:01:15] Waiting for dump to complete... 
[20:01:17] Dump count not reached. 

~ 16GB 이상의 메모리를 사용하는 작업자 프로세스에 대해 동일한 액세스 거부 오류가 발생합니다.

또한 -r을 추가하여 How to: Take a Memory Dump of an ASP.NET Application Pool Quickly에서 권장하는 프로세스를 반영/복제했지만 위와 같은 오류 메시지가 계속 나타납니다.

업데이트 : 기본적으로 IIS 응용 프로그램 풀은 90 초 이내에 진행중인 내부 ping 요청에 응답하지 않으면 재활용됩니다. 당신은 고급 설정에서 볼 수 있습니다

90 second Ping Maximum Response Time

그리고 오류 메시지가 그래서 아마 그 문제의 원인, 약 90 초 후에 발생합니다.

+0

관리자 모드에서 명령 프롬프트가 실행되기를 바랍니다. 또한 DebugDiag를 사용해 보셨습니까? https://blogs.msdn.microsoft.com/parvez/2016/08/06/iis-application-pool-crash-and-debug-diag/ –

답변

9

그래서 procdump는 -r reflect/clone 옵션을 사용하는 경우에도 내부 핑에 응답하지 못하도록 작업자 프로세스를 일시 중단합니다. 그리고 덤프 파일에 메모리를 쓰는 데 90 초가 걸리면 IIS는 작업자를 재활용하여 이전 프로세스가 종료되도록합니다. Procdump는 읽으려는 메모리가 더 이상 할당되지 않아 프로세스가 더 이상 존재하지 않기 때문에 "액세스가 거부되었습니다"또는 "Only part of a ReadProcessMemory or WriteProcessMemory request was completed" 오류 메시지를 반환합니다.

그것이 procdump 프로세스를 중단 할 수 있도록 또한 svchost.exe -k iissvcs 과정을 중단 Resouce Monitor, Process Explorer 또는 PsSuspend을 사용할 수 있습니다이 문제를 해결하려면.

#Prevent IIS from recycling the process during procdump and causing an Access Denied error message 
$iispid = Get-Process svchost | ?{$_.modules.ModuleName -eq "iisw3adm.dll"} | Select -First 1 -ExpandProperty Id 
$workerpid = Get-Process w3wp | Sort ws -Descending | Select -First 1 -ExpandProperty Id 
cd ~\Downloads #move to location where you want to save the dump files 
#Add -accepteula to the sysinternals calls if you want to bypass the initial EULA prompt on new servers 
& "c:\sysinternals\pssuspend.exe" $iispid 
Write-Output "Creating memory dump for w3wp PID $workerpid" 
& "c:\sysinternals\procdump.exe" -ma $workerpid 
& "c:\sysinternals\pssuspend.exe" $iispid -r 

출력은 다음과 비슷한 모습이 될 것입니다 :

PS> & "\\dfshare\sysinternals\pssuspend.exe" $iispid 

PsSuspend v1.06 - Process Suspender 
Copyright ⌐ 2001-2003 Mark Russinovich 
Sysinternals 

Process 49836 suspended. 

PS> & "\\dfshare\sysinternals\procdump.exe" -ma 98340 

ProcDump v8.2 - Sysinternals process dump utility 
Copyright (C) 2009-2016 Mark Russinovich and Andrew Richards 
Sysinternals - www.sysinternals.com 

[01:03:24] Dump 1 initiated: C:\Users\gbray\Downloads\w3wp.exe_161230_010324.dmp 
[01:03:29] Dump 1 writing: Estimated dump file size is 19347 MB. 
[01:05:14] Dump 1 complete: 19350 MB written in 109.8 seconds 
[01:05:14] Dump count reached. 

PS> & "\\dfshare\sysinternals\pssuspend.exe" $iispid -r 

PsSuspend v1.06 - Process Suspender 
Copyright ⌐ 2001-2003 Mark Russinovich 
Sysinternals 

Process 49836 resumed. 

다음 PowerShell 스크립트는 가장 큰 작업 세트와 W3WP 프로세스의 메모리 덤프를 생성하기 위해 관리 콘솔에서 실행할 수 있습니다 iissvcs 프로세스를 일시 중단하는 다른 문제가 무엇인지 모릅니다. 따라서 메모리 덤프가 생성 된 후 iisreset을 실행하는 것이 가장 좋습니다.

+0

http : //에 따라 myitforum.com/myitforumwp/2017/05/17/sysinternals-updates-procdump-autoruns-bginfo-livekd-process-monitor-process-explorer/ ProcDump v9에서도이 문제를 해결할 수 있습니다. –