Ошибка записи файла дампа Procdump: 0x80070005 Ошибка 0x80070005 (-2147024891): доступ запрещен

#iis #procdump

#iis #procdump

Вопрос:

Недавно у нас возникли проблемы при попытке захватить дамп памяти для различных пулов приложений IIS на сервере 2012 R2. Я пытался использовать диспетчер задач, но он выдает ошибку, а также использует procdump в административной консоли:

 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____Downloadsw3wp.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.
  

Я пробовал различные комбинации -ma и -mA и -64 и procdump64, но все они имеют одинаковую ошибку «Доступ запрещен» для рабочих процессов, использующих более ~ 16 ГБ памяти.

Я также попытался добавить -r для отражения / клонирования процесса, как рекомендовано в разделе Как: ASP.NET Пул приложений быстро, но все равно выдает то же сообщение об ошибке, что и выше.

Обновление: таким образом, по умолчанию пулы приложений IIS будут переработаны, если они не отвечают на текущие внутренние запросы ping в течение 90 секунд. Вы можете увидеть это в дополнительных настройках:

Максимальное время отклика 90 секунд

И сообщение об ошибке появляется примерно через 90 секунд, поэтому, вероятно, это и является причиной проблемы.

Комментарии:

1. Я надеюсь, что командная строка запущена в режиме администратора. Также вы пытались использовать DebugDiag, смотрите Здесь blogs.msdn.microsoft.com/parvez/2016/08/06 /…

Ответ №1:

Итак, что происходит, procdump приостанавливает рабочий процесс, что не позволяет ему отвечать на внутренние запросы, даже при использовании параметра -r reflect / clone . И если запись памяти в файл дампа занимает больше 90 секунд, IIS перезапустит рабочий процесс, в результате чего старый процесс будет завершен. Затем Procdump возвращает сообщение об ошибке «Отказано в доступе» или «Завершена только часть запроса ReadProcessMemory или WriteProcessMemory», поскольку память, которую он пытался прочитать, больше не выделена, и процесс больше не существует.

Чтобы обойти эту проблему, вы можете использовать монитор ресурсов, Process Explorer или PsSuspend, чтобы также приостановить svchost.exe -k iissvcs процесс, чтобы он не мог прервать процесс procdump. Следующий сценарий PowerShell можно запустить в консоли администратора для создания дампа памяти процесса w3wp с наибольшим рабочим набором:

 #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
amp; "c:sysinternalspssuspend.exe" $iispid 
Write-Output "Creating memory dump for w3wp PID $workerpid"
amp; "c:sysinternalsprocdump.exe" -ma $workerpid
amp; "c:sysinternalspssuspend.exe" $iispid -r
  

Вывод должен выглядеть примерно так:

 PS> amp; "\dfsharesysinternalspssuspend.exe" $iispid

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

Process 49836 suspended.

PS> amp; "\dfsharesysinternalsprocdump.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:UsersgbrayDownloadsw3wp.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> amp; "\dfsharesysinternalspssuspend.exe" $iispid -r

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

Process 49836 resumed.
  

Я понятия не имею, какие другие проблемы может вызвать приостановка процесса iissvcs, поэтому, возможно, лучше всего запустить iisreset после создания дампа памяти.

Комментарии:

1. Согласно myitforum.com/myitforumwp/2017/05/17 /… это также может быть устранено в ProcDump v9

2. 404 в вашем предыдущем комментарии @gregBray .

3. Спасибо за объяснение. Другим обходным путем является увеличение времени ожидания запроса, чтобы оно было достаточно длинным для создания дампа. Я не уверен. Однако изменения могут вступить в силу только после повторного использования пула, поэтому вам нужно будет дождаться повторного возникновения проблемы (если такой случай применим к вам)