Изучение утечки памяти в svchost / nsi с данными

645
strix

svchostи, nsiв частности, постоянно были связаны с утечками памяти на протяжении многих лет, когда поиски в Google приводили к большому количеству обращений (но мало решений). Связанные вопросы с соответствующими ответами задавались много раз на суперпользователе в прошлом, но все, что я видел, было людьми, спрашивающими, как определить, какой процесс содержит утечку, которая не очень помогает, если я уже знаю это.

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

Единственное, что можно было предположить для решения проблемы, - это применение базы знаний 2950358 (извините, я не могу ссылаться из-за отсутствия репутации), но установщик просто говорит, что это обновление не применимо к этой системе.

Машина, ОС и программное обеспечение: Win7 Pro x64, 8 ГБ памяти с видео nVidia GTX 580 (драйверы от nVidia, 372.54 от 15 августа, то есть 15 дней назад на момент написания этой статьи). Процессы, которые почти всегда работают, включают Spotify, Chrome (в настоящее время v52.0.2743.116), Skype (в настоящее время 7.26.0.101) плюс несколько Cygwin mintty, bashа также sshпроцессы. Internet Explorer не установлен (за исключением битов, которые нельзя удалить). Обычные надстройки для браузера, такие как flash для yt и т. Д. Ничего необычного, хотя некоторые из них интенсивно используют сети и могут, теоретически, быть причастны, если верить подобным KB 2847346. Все обновления Windows, включая последнее необязательное обновление, были применены.

Пропустив некоторые промежуточные шаги, я разделил nsiего на отдельные svchost, перезагрузил и затем регистрировал выходные данные tasklist, каждую секунду, для PID nsiпроцесса и svchostк которому он nsiраньше принадлежал. Результаты представлены здесь ; Конечно, последний в основном плоский, но nsiрастет с постоянной скоростью (если не увеличивается).

В то же время я procmonзаписывал вызовы sys nsi, но все события, кроме 6, были событиями «Создание потоков» и «Выход из потоков», что не очень полезно. Все, что вызывает проблему, не заставляет nsiделать системные вызовы самостоятельно.

До того, как я разделился nsi, я проводил аналогичную трассировку в течение почти четырех дней, и этот svchostэкземпляр начинался с 24 МБ и непрерывно рос до примерно 2150 МБ до того, как я его остановил, причем скорость изменения, очевидно, со временем возрастала. В прошлом я видел svchostпроцесс нарушения порядка 6 ГБ, но во время procmonработы я начал исчерпывать память. Пару раз какая-то память освобождалась, но не так сильно, как было выделено. Я могу связать этот график позже, если кто-нибудь захочет его увидеть.

Я также отслеживал это с помощью procmonи могу дать разбивку по событиям, но они, вероятно, не очень интересны, учитывая, что установлено, nsiчто это вина, и что ни одно из его событий не особенно интересно.

Есть ли какой - либо инструмент для отслеживания, какие процессы делают запросы о конкретной услуге?

Каков мой следующий шаг, учитывая, что исправление, очевидно, релевантное KB не применимо?

2
Список произведенных файлов в базе знаний. Вы убедились, что у вас нет одного из поврежденных файлов? Если вы этого не сделаете, то исправление, на которое вы ссылались, неприменимо и, более того, like не имеет никакого отношения к описанному вами поведению. * Кроме того, svchost не имеет утечки памяти, приложения, которые связываются с ним, имеют утечку памяти, есть огромная разница * Есть ли у вас обновление программного обеспечения, включающее это исправление? Ramhound 7 лет назад 0
Установите WPT (часть Win10 SDK: https://dev.windows.com/en-us/downloads/windows-10-sdk, который также запускается с Win7), запустите WPRUI.exe, выберите ** Первый уровень ** , ** загрузка ЦП **, ** использование VirtualAlloc, ** Resident Analysis ** и нажмите ** start ** Теперь захват 5 минут использования памяти растут и нажмите ** Save **, чтобы сохранить отчет в ETL файл. Заархивируйте большой ETL-файл в zip / RAR-файл, загрузите zip (OneDrive, dropbox, google drive) и опубликуйте здесь ссылку для обмена. Я постараюсь проанализировать это и посмотреть, что делает сервис magicandre1981 7 лет назад 0
@Ramhound да, они все равно являются частью базовой ОС (`rpcrt`,` rpchttp`). Я предполагаю, что причина, по которой исправление говорит «не применимо», заключается в том, что оно довольно старое (2014), и эти файлы уже были исправлены с помощью обновления Windows. Утечка памяти будет отображаться в размерах WSS / PWS / commit затронутых процессов, но это не означает, что основная причина находится в затронутом процессе (`nsi`). Как объясняется в KB 2847346, процессы, которые не отменяют уведомления, могут вызвать утечку `nsi`. strix 7 лет назад 0
@ magicandre1981 сделает, и спасибо за предложение! Если я смогу разобраться, как его использовать, я сначала покопаюсь и посмотрю, есть ли что-нибудь полезное, о чем я могу сообщить. strix 7 лет назад 0
@strix - Вы ошиблись. Это не применимо, потому что у вас, вероятно, есть фактическая база данных, в которой установлено исправление. По этой причине я хочу, чтобы вы проверяли версии файлов, чтобы убедиться, что на вас не влияет ссылка для описания памяти, на которую вы ссылались. Ramhound 7 лет назад 0
@ magicandre1981 http://bit.ly/2c6eoSu; PID для nsi в этом следе - 1808. Дайте мне знать, когда вы его получите, чтобы я мог отключить его. Эта запись с почти новой загрузки без каких-либо чувствительных приложений. (Я взглянул на WPA, но на самом деле, чтобы понять его, требуется больше знаний об архитектуре Windows, чем у меня.) Примечание: мне пришлось перейти на ADK 8.1, потому что SDK 10 дал мне «недопустимый исполняемый файл win32», но я предполагаю, что это так же хорошо. В очередной раз благодарим за помощь. strix 7 лет назад 0
Я вижу только некоторое использование памяти из-за WorkerFactory, которая выполняет некоторую работу (ntdll.dll! NtWaitForWorkViaWorkerFactory вызывает ntoskrnl.exe! RtlpCreateUserThreadEx). это побочный эффект других инструментов, которые запрашивают сетевые данные, такие как боковая панель (закрытие гаджетов, которые отображают сетевую статистику) magicandre1981 7 лет назад 0
@ magicandre1981 Спасибо за попытку. Возможно, в тот момент проблему не решали, хотя, если память не откажется, процесс увеличился примерно на 500 тыс. За этот 7-минутный период. Теперь, после того как машина некоторое время работала и проблема стала более явной, существует около 40 или около того потоков, большинство из которых имеют начальный адрес `ntdll.dll! RtlDestroyHandleTable` в состоянии` Wait: WrQueue`, если это вообще значимым. Периодически они разрушаются, но вскоре возвращаются. Это дает какую-то подсказку? Напоминает мне о застрявших записях таблицы PID в Unix, потому что dest. Процесс мертв. strix 7 лет назад 0
@ magicandre1981 Так как вы упомянули боковую панель, я убил в ней все (что, по-видимому, также привело к исчезновению sidebar.exe) и будет отслеживать размер nsi в течение следующих нескольких дней, чтобы увидеть, если это имеет какое-то значение, и сообщит назад. Не могу понять, почему это должно, но вы никогда не знаете. strix 7 лет назад 0
@ magicandre1981 Через 46 часов сервис `nsi` вырос с 8 МБ до 936 МБ даже без активной боковой панели, поэтому я думаю, что боковая панель не так. Любые предложения о том, как отследить, какое приложение вызывает `nsi`, а не свободную память? Могу ли я / должен использовать WPT / WPA для поиска вызовов `ntdll.dll! NtWaitForWorkViaWorkerFactory`, и нужно ли для этого загружать символы? Если так, где я могу получить символьные данные? strix 7 лет назад 0
внутри WPA вы можете загрузить символы отладки. https://msdn.microsoft.com/en-us/windows/hardware/commercialize/test/wpt/symbol-support magicandre1981 7 лет назад 0
@ magicandre1981 высоко ценится, спасибо! strix 7 лет назад 0
Вы смогли найти причину? magicandre1981 7 лет назад 0

0 ответов на вопрос