Недавно у нас была проблема на нашем работающем сервере, из-за которой наше веб-приложение перестало отвечать. Все, что мы получили, это 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 обновилась и сервер перезагрузился, поэтому мне интересно, решило ли это проблему. Я определенно не вижу последовательного роста в пуле невыгружаемых байтов теперь, когда я был до этого.