Недавно у нас была проблема на нашем работающем сервере, из-за которой наше веб-приложение перестало отвечать. Все, что мы получили, это 503 ошибки, пока мы не перезагрузили сервер, тогда все было хорошо. В конце концов я отследил его до httperr.log и обнаружил множество ошибок 1_Connections_Refused.
Дальнейшее расследование показало, что мы достигли предела невыгружаемого пула. С тех пор мы выполняем мониторинг памяти невыгружаемого пула с помощью Poolmon.exe и считаем, что мы определили тег, который вызывает проблему.
Tag Type Allocs Frees Diff Bytes Per Alloc
Even Nonp 51,231,806 50,633,533 684,922 32,878,688 48
Если мы используем poolmon.exe / g, он отображает подключенный драйвер как [<unknown> объекты событий].
Это почти ничего не помогает. Моя команда потратила немало времени на изучение этой проблемы и не смогла найти способ сузить ее до конкретного приложения или службы. Мне кажется, что большинство людей решают проблему, убивая процессы на машине, пока не увидят сброс невыгруженной памяти. Это не совсем то, что вы хотите увидеть при работе на серийном компьютере.
Если я открою диспетчер задач и просматриваю список процессов. Я вижу MailService.exe со значением пула NP 105 КБ, что на 36 КБ выше, чем значение процесса, указанного в секунду. Поскольку в прошлом у нас были некоторые проблемы с нашим почтовым сервером (которые могут или не могут быть связаны с этой проблемой), я чувствую, что это является причиной проблемы.
Однако, прежде чем мы перезапустим службы, я хотел бы иметь немного больше уверенности, чем просто "внутреннее чувство".
Я также пытался использовать poolmon.exe / c, но это всегда возвращает ошибку:
unable to load msvcr70.dll/msvcp70.dll
и это не создает localtag.txt. Моему коллеге пришлось скачать pooltag.txt из Интернета, потому что мы не можем понять, где он находится. У нас нет win debugger или win DDK (что я вижу). Возможно, приведенная выше ошибка возникает из-за того, что у нас не установлено ни одного из них, но я не знаю.
Наконец я попробовал:
C:\windows\system32\driver\findstr /m /l Even *.sys
Это вернуло довольно большой список файлов .sys и снова не помогло решить проблему.
Итак, мой вопрос заключается в следующем: есть ли другой способ сузить причину этой утечки памяти?
ОБНОВИТЬ:
Как предложено ниже, я регистрировал пул невыгружаемых байтов в течение последнего дня или около того, чтобы увидеть, если какой-либо процесс в тренде. По большей части все процессы выглядят довольно статичными в своем использовании. Двое из них выглядят слегка подтянутыми. Я буду продолжать следить за этим в течение следующих нескольких дней.
Я также забыл упомянуть ранее, что ни один из процессов не использует слишком много дескрипторов.
ОБНОВЛЕНИЕ 2:
Я следил за этим последние пару недель. И пул невыгружаемых байтов для отдельных процессов, и общий пул невыгружаемых байтов оставались относительно стабильными в течение этого времени. За это время Windows обновилась и сервер перезагрузился, поэтому мне интересно, решило ли это проблему. Я определенно не вижу последовательного роста в пуле невыгружаемых байтов теперь, когда я был до этого.
источник
Ответы:
Я наблюдаю за этим в течение 6-7 недель и, наконец, могу дать окончательный ответ на проблему.
Во-первых, непостраиваемые байты для отдельных процессов не дали мне ничего полезного, поскольку все они казались довольно статичными в своем использовании. Были всплески, но использование всегда возвращалось к базовой линии после этого.
Общее количество нестраничных байтов памяти также некоторое время было статичным, но затем оно постепенно увеличивалось, а затем резко возрастало. После всплеска примерно половина памяти была освобождена, а затем некоторое время снова оставалась статичной (на более высоком уровне), пока шаблон не повторился. Глядя на график, я заметил, что эти всплески, по-видимому, были довольно равномерно распределены и, как оказалось, они происходили с интервалом в 2 недели и всегда в воскресенье.
Итак, следующий вопрос был: что работает по две недели в воскресенье? Я посмотрел в Event Viewer, и каждый раз, когда происходил всплеск, McAfee бежал . Я также думаю, что, часто заходя на сервер для отслеживания проблемы, мы непреднамеренно усугубляли проблему, поскольку у McAfee есть сканер в реальном времени, и я считаю, что это привело к меньшему увеличению, которое мы видели.
Я думаю, что сканирование запланированных заданий также объясняет, почему мы видели увеличение памяти NP, прикрепленное к тегу объектов Event в PoolMon вместо специального тега McAfee. Это было главным, что действительно привело нас по садовой дорожке.
Теперь, когда мы наконец знаем, что вызывает утечки, мы можем что-то с этим сделать. Невероятно, что это заняло так много времени, чтобы выследить это все же.
ОБНОВЛЕНИЕ : так же, как последнее замечание. McAfee's был обновлен на выходных, и это полностью решило нашу проблему нестраничной памяти.
ОБНОВЛЕНИЕ 2 : Так как я только что получил голосование за это, я добавлю дополнительное обновление к этому. Первоначально обновление McAfee, похоже, решило нашу проблему, то есть мы больше не видим массовых всплесков памяти NP через регулярные промежутки времени. Я также заметил, что после обновления кажется, что McAfee больше не записывает журналы в программу просмотра событий по умолчанию, которая скрывается при активном сканировании.
Но мы все еще наблюдаем постепенное увеличение использования памяти NP. Дошло до того, что теперь нам нужно перезагружать наш сервер каждые 2 недели или около того. Это настолько плохо , что мы недавно приобрели новый сервер в надежде , что обновленные аппаратные средства и программное обеспечение будет сделать эту проблему уйти , НО наш совершенно новый сервер только с Windows Server 2008, SQL Server 2008 R2 и McAfee установлен был STILL , показывающий утечку NP памяти , Только после того, как я полностью удалил McAfee, утечка прекратилась, и она осталась статичной даже после того, как мы настроили сервер со всем нашим программным обеспечением, готовящимся к его переключению.
С тех пор я прочитал, и я не знаю, правда ли это, что проблема не в McAfee, а в некоторой подпрограмме Windows, используемой McAfee, которая приводит к утечке памяти NP. Очевидно, сетевая активность является причиной утечки, то есть большая сетевая активность => большие утечки. Похоже, это согласуется с нашим опытом, поскольку утечка усилилась, поскольку наш сервер стал более загруженным.
источник