Как устранить одновременный сбой нескольких служб и приложений?
Наше приложение запускается на нескольких виртуальных машинах (изолированных экземплярах). Он состоит из нескольких сервисов и веб-сайта ASP.NET. Эта проблема в той или иной степени возникает почти у всех из них.
Обнаружилось, что сервис часто зависал, примерно каждые 2-4 часа, иногда реже, иногда чаще. Поразительно, но одновременно произошел сбой рабочего процесса веб-сайта. В некоторых средах в комбинированном сбое могут быть задействованы дополнительные процессы (обычно они связаны с обновлениями Windows/Защитника или пересылкой событий Splunk).
Процесс обслуживания не всегда может быть задействован, но обычно он включен. Я не могу определить четкий триггер. В некоторых случаях я мог видеть, что прямой результат открытия службой базы данных sqlite приводил к сбою, но не всегда. Иногда сбой произошел после некоторого бездействия на веб-сайте, а затем произошел сбой, когда пользователь взаимодействует с ним. Случаи, когда намеки на обновления Windows/Защитника кажутся косвенным триггером. Иногда просто нет никаких реальных указаний на то, что прямо или косвенно привело к сбою нескольких процессов.
Основываясь на кодах ошибок, я предполагаю, что где-то произошла утечка памяти, которая исчерпывает ресурс ядра, но я не понимаю, почему это затрагивает другие процессы. Большинство этих серверов имеют 64 ГБ ОЗУ, а используют всего около 15 ГБ. Обычно они практически простаивают — ничто не нагружает процессор.
Средство просмотра событий, показывающее несколько APPCRASH за очень короткое время
Сбой нашего сервиса обычно выглядит так:
Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0
Problem signature:
P1: xxxxxxxxxxxxxxxxxx.exe
P2: 2.126.2266.1245
P3: 6385e363
P4: SQLite.Interop.dll
P5: 1.0.106.0
P6: 59cba20e
P7: c0000005 /* memory access violation */
P8: 000000000011a659
P9:
P10:
Сбой на сайте выглядит так:
Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0
Problem signature:
P1: w3wp.exe
P2: 10.0.14393.0
P3: 57899135
P4: ChakraCore.DLL
P5: 1.11.5.0
P6: 5c374f16
P7: 8007000e /* 0xE - ERROR_OUTOFMEMORY */
P8: 0001663d
P9:
P10:
Вот еще некоторые из других процессов:
Event Name: APPCRASH
Problem signature:
P1: splunk-winevtlog.exe
P2: 2304.769.25500.50706
P3: 639cc7e5
P4: ucrtbase.dll
P5: 10.0.14393.3659
P6: 5e9140a1
P7: 000000000006de4e
P8: c0000409
P9: 0000000000000007
Event Name: APPCRASH
P1: splunk-winevtlog.exe
P2: 2304.769.25500.50706
P3: 639cc7e5
P4: KERNELBASE.dll
P5: 10.0.14393.5427
P6: 633689d4
P7: eeab5254
P8: 0000000000026ea8
Event Name: WindowsUpdateFailure3
Problem signature:
P1: 10.0.14393.5127
P2: 8007000e
P3: 00000000-0000-0000-0000-000000000000
P4: Scan
P5: 0
P6: 1
P7: 0
P8: Windows Defender
P9: {3DA21691-E39D-4DA6-8A4B-B43877BCB1B7}
P10: 0
Event Name: WindowsUpdateFailure3
Problem signature:
P1: 10.0.14393.5127
P2: 80070008
P3: 00000000-0000-0000-0000-000000000000
P4: Scan
P5: 0
P6: 1
P7: 8024500b
P8: Windows Defender
P9: {9482F4B4-E343-43B6-B170-9A65BC822C77}
P10: 0
Event Name: WindowsUpdateFailure3
Problem signature:
P1: 10.0.14393.5127
P2: 80070643
P3: CAC11B5A-55A0-4E6E-A5AC-F2DD8411BF7C
P4: Install
P5: 200
P6: 0
P7: 65a
P8: CcmExec
P9: {3DA21691-E39D-4DA6-8A4B-B43877BCB1B7}
P10: 0
Event Name: WindowsWcpOtherFailure3
Problem signature:
P1: 10.0.14393.5351:3
P2: wcp\sil\merged\ntu\ntsystem.cpp
P3: Windows::Rtl::SystemImplementation::DirectFileSystemProvider::SysSetInformationFile
P4: 3903
P5: c0190037
P6: 0xfe1c914f
Event Name: CLR20r3
Problem signature:
P1: SCNotification.exe
P2: 5.0.9068.1000
P3: a6f95f90
P4: System
P5: 4.8.4545.0
P6: 62bd3c75
P7: 204d
P8: 8e
P9: System.Net.Sockets.Socket
Event Name: PowerShell
Problem signature:
P1: powershell.exe
P2: 10.0.14393.5127
P3: System.IO.FileLoadException
P4: System.IO.FileLoadException
P5: .Automation.Internal.TelemetryWrapper.TraceMessage
P6: .Automation.Internal.TelemetryWrapper.TraceMessage
P7: Consol.. main thread
Я попытался настроить посмертный отладчик для получения аварийного дампа для них, поскольку большая часть отчетов об ошибках Windows не создавала дампы. Но почему-то я не понимаю это правильно. Сбои случаются, но я просто не получаю тех дампов, которых ожидаю. Вот скрипт, который я использовал для настройки WinDbg Preview:
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug' -Name 'Auto' -Value 1
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug' -Name 'Debugger' -Value `
'"E:\CrashDumps\windbgx64\DbgX.Shell.exe" -p %ld -e %ld -c ".dump -ma -j %p -u E:\CrashDumps\dump64.dmp; qd" /accepteula'
Set-ItemProperty 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug' -Name 'Auto' -Value 1
Set-ItemProperty 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug' -Name 'Debugger' -Value `
'"E:\CrashDumps\windbgx86\DbgX.Shell.exe" -p %ld -e %ld -c ".dump -ma -j %p -u E:\CrashDumps\dump32.dmp; qd" /accepteula'
Я также пытался настроить WER для создания полных дампов всех процессов, но это тоже не помогло. Я в тупике. Как мне продолжить поиск этой проблемы? Какие инструменты мне следует использовать? на что мне следует обратить внимание/на что.