none
невыгружаемый пул памяти пуст... RRS feed

  • Вопрос

  • Добрый день,господа.

    Столкнулся с ситуацией такой- существует сервер на котором стоит 2008R2 ,используется несколькими пользователями как терминальный сервер для 1С. Контроллер домена,DNS сервер,и все.Взял я этот сервер на обслуживание совсем недавно.Но каждые три - пять дней он ложится на бок.И стартует только после перезагрузки.В журнале сразу появляется ошибка 2019 невыгружаемый пул памяти пуст.

    Запустил утилиту poolmon.Нашел Два тега у которых объем памяти постоянно растет,и не уменьшается.Теги звучат так PsCb и Proc. И вот теперь не могу понять как заставить их перестать это делать.

    Будьте любезны помочь в данном вопосе.

    26 февраля 2014 г. 5:32

Ответы

  • используется несколькими пользователями как терминальный сервер для 1С

    Да, вещь интересная за 2,5 минуты было создано 85 сессий, каждая продолжительностью около 2с с четырьмя процессами как это положено logonui, smss, winlogon, csrss.

    почитай, у тебя такая-же ситтуация по внешним признакам, смотри журналы системы и аудита на попытки входа в систему, возможно это вирус


    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers


    • Изменено sergmat 28 февраля 2014 г. 17:42
    • Помечено в качестве ответа Lin_Hei 2 марта 2014 г. 6:59
    28 февраля 2014 г. 12:00
  • А ничего нового, все тоже самое - за 43 с трассировки было создано 13 таких же пустых сессиий, тег PsCb был закреплен за первым smss (296)  - который отвечает за создание сессий при входе на машину, соответсвенно 13 сессий - 13 выделений памяти с этим тегом. Сессий к этому времени было уже наделано 950 штук, разберешься откуда сессии - решишь проблему.

     


    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers

    • Помечено в качестве ответа Lin_Hei 2 марта 2014 г. 6:59
    2 марта 2014 г. 6:32

Все ответы

  • Proc nt!ps Process objects - тег обектов процесс, поэтому первый вопрос - сколько их на машине запущено через 3-5 дней? PsCb в pooltag нет - не знаю чей это тег, можно поискать в папке с драйверами тот драйвер у которого есть в ресурсах эта строка.

    По поводу утечек в пулах - несколько методов отлова, выбирай понравившийся:

    http://blogs.msdn.com/b/ntdebugging/archive/2012/11/30/troubleshooting-pool-leaks-part-7-windows-performance-toolkit.aspx

    http://blogs.msdn.com/b/ntdebugging/archive/2012/10/31/troubleshooting-pool-leaks-part-6-driver-verifier.aspx

    http://blogs.msdn.com/b/ntdebugging/archive/2012/09/28/troubleshooting-pool-leaks-part-5-poolhittag.aspx

    зы: мне кажется, что если мы с процессами разберемся то и делать ничего не надо будет.

          

    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers



    • Изменено sergmat 26 февраля 2014 г. 12:34
    26 февраля 2014 г. 12:33
  • Маленькое дополнение: процессы могут завершиться (и потому не  показываться в диспетчере задач и т.п. средсвах просмотра активных процессов), но не удаляться из системы, потому что какой-то процесс имеет открытые дескрипторы (синонимы: описатели, handle) объектов этих процессов.

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


    Слава России!


    • Изменено M.V.V. _ 26 февраля 2014 г. 14:31
    26 февраля 2014 г. 14:30
  • Если процесс завершается, то он удаляется из списка процессов, приложения которые показывают активные процессы используют API интерфейс либо напрямую в ядре с помощью драйвера просматривают этот список, если процесс есть а в списке его нет - то это руткит.

    Возможно, что какой-то драйвер использует тег 'Proc' для своих целей, например антивирус.

    В диспетчере задач  есть колонка поинтереснее - с неподкачиваемым пулом, сделал для себя открытие ;) , будет понятно какой процесс его израсходовал, а дальше да, через procexp, выбрать тот процесс, который израсходовал пул  и поизучать его.

    как искать тег в файле:

    strings -n 4 %SystemRoot%\system32\drivers\*.sys | findstr PsCb

    ну и другие папки попробовать


    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers

    26 февраля 2014 г. 17:52
  • 47000 Дескрипторов у TrustedInstaller.exe ,у остальных больше 3000 не набежало.Это реально много?:)

    27 февраля 2014 г. 4:09
  • strings -n 4 %SystemRoot%\system32\drivers\*.sys | findstr PsCb Команда конечно интересная,но что то она мне ничего не показала. пробовал даже дописать параметр -s. Но вывода информации никакой нет...Может туплю=/

    При добавлении в taskmgr.msc колонок пулов он мне говорит что больше всего съел dns.exe (2047Кб),а poolmon утверждает что скушано PsCb 357616336b , a у Proc 116012688b. То есть диспетчер не смог их найти почему то.Видимо не процессы это.

    А вот это Windows Performance Toolkit еще не успел сделать.Сейчас именно этим занимаюсь,позже напишу как разберусь.

    27 февраля 2014 г. 4:16
  • настрой систему на создание дампа вручную (лучше дамп ядра), и раз тебе все равно машину перегружать сделай сначала дамп и залей на www.skydrive.com ссылку выложи сюда

    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers

    27 февраля 2014 г. 6:34
  • Дамп сделать не могу...я не нахожусь на близком расстоянии с сервером...
    • Изменено Lin_Hei 27 февраля 2014 г. 7:31
    27 февраля 2014 г. 7:31
  • 47000 Дескрипторов у TrustedInstaller.exe ,у остальных больше 3000 не набежало.Это реально много?:)

    Это, по меньшей мере, необычно много (посмотрел на нормальных машинах - у этого процесса открыта сотня-другая описателей). И вполне коррелирует с объемом занятой памяти в неподкачиваемом пуле.

    Посмотрите типы открытых описателей с помощью Process Explorer. Ecли это - процессы, то это - оно. 


    Слава России!

    27 февраля 2014 г. 8:32
  • Если процесс завершается, то он удаляется из списка процессов, приложения которые показывают активные процессы используют API интерфейс либо напрямую в ядре с помощью драйвера просматривают этот список, если процесс есть а в списке его нет - то это руткит.

    Завершенный процесс удаляется из списков процессов - это да, но память объекта процесса не освобождается, пока у Object Manager'а зарегистрированы ссылки на него (это может быть дескриптор или прямая ссылка, полученная программой режима ядра - ОС или драйвером). Так что завершение процесса не обязательно приводит к освобождению его памяти.

    Я лично видел аналогичную утечку памяти, связанную с потоками (тег Thre) в Win2K3: криво написанная серверная программа запускала рабочие потоки, но после завершения не закрывала их описатели. В списке потоков процесса эти потоки не значились, но дескрипторы их не были закрыты и память занята (и да, в колонке использования неподкачиваемого пула этого процесса эта память не отражалась).


    Слава России!

    27 февраля 2014 г. 8:40
  • память объекта процесса не освобождается, пока у Object Manager'а зарегистрированы ссылки на него (это может быть дескриптор или прямая ссылка, полученная программой режима ядра - ОС или драйвером). Так что завершение процесса не обязательно приводит к освобождению его памяти.

    Обязательно! Системный код управляет жизненным циклом ядерных объектов, забирает и освобождает под них ресурсы, и если ядерный объект удаляется то и все ресурсы, задействованные под этот объект освобождаются. Про описатели, указатели - они просто становятся непригодными для использования и обращение по ним приведет в пользовательском режиме к исключению INVALID_HANDLE и завершению приложения, в ядерном к BSOD
    утечку памяти, связанную с потоками (тег Thre)
    я сделаю утечку с любыми ascii символами в тч Proc, Thre и тп и системный код будет не при чем

    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers

    27 февраля 2014 г. 11:17
  • Давайте не будем пока спорить и сбивать с толку ТС.  Найдет ли он процесс, который держит описатели и настроит его перезапуск, как предлагаю я, или вы проанализируете его дамп и сообщите, в чем причина не освобожения памяти, - не важно, главное, чтобы проблема была решена.

    Проблему с же с утечкой из пула из-за незакрытых дескрипторов потоков я наблюдал и решал лично: в качестве обходного решения был настроен еженочный перезапуск соответсвующей службы - и это реально помогло (а потом подоспело и структурное решение в виде новой версии с исправленной ошибкой). Так что в том конкретном случае тег Thre - это была именно память, используемая объектами потоков.


    Слава России!

    27 февраля 2014 г. 11:42
  • "Посмотрите типы открытых описателей с помощью Process Explorer. Ecли это - процессы, то это - оно. "

    В общем, он пропал TrustedInstaller.exe. Теперь максимальное количество дискрипторов у dns-сервера,но там и 3000 не набралось.И невыгружаемый пул у него 3МБ

    Через procexp добавил этот пул,он утверждает что максимальное значение принимает 2Гис,и это 13Кб.

    Что то я вообще запутался...Да и ваши прения меня просто вбивают в ступор,я половины не понял из всего описанного...

    Сейчас пытаюсь разобраться по подробнее с procexp и WPT.Но уже не понимаю что я должен искать.

    28 февраля 2014 г. 1:38
  • если WPT установил на машину, то дальше все просто, выполни из командной строки:

    xperf -on Base+CSwitch+POOL -stackwalk PoolAlloc+PoolAllocSession+PoolFree+PoolFreeSession –PoolTag Proc -BufferSize 1024 -MaxBuffers 1024 -MaxFile 1024 -FileModeCircular

    запусти poolmon, убедись что продолжает расти тег Proc и останови трассировку:

    xperf -d СюдаПутьПодставь\NpPoolProcTagLeak.etl

    файл NpPoolProcTagLeak.etl залей на www.skydrive.com ссылку в тему

    потом все тоже самое только в строке -PoolTag меняешь Proc на PsCb


    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers

    28 февраля 2014 г. 5:17
  • "Посмотрите типы открытых описателей с помощью Process Explorer. Ecли это - процессы, то это - оно. "

    В общем, он пропал TrustedInstaller.exe. Теперь максимальное количество дискрипторов у dns-сервера,но там и 3000 не набралось.И невыгружаемый пул у него 3МБ

    Через procexp добавил этот пул,он утверждает что максимальное значение принимает 2Гис,и это 13Кб.

    Что то я вообще запутался...Да и ваши прения меня просто вбивают в ступор,я половины не понял из всего описанного...

    Сейчас пытаюсь разобраться по подробнее с procexp и WPT.Но уже не понимаю что я должен искать.

    procexp отменяется: если нет большого количества открытых дескрипторов, то вы ничего им не увидите.

    Советую выполнять рекомендации sergmat.


    Слава России!

    28 февраля 2014 г. 9:20
  • При выполнении этой команды xperf -on Base+CSwitch+POOL -stackwalk PoolAlloc+PoolAllocSession+PoolFree+PoolFreeSession –PoolTag Proc -BufferSize 1024 -MaxBuffers 1024 -MaxFile 1024 -FileModeCircular он ругается - xperf: error: -MaxFile: doea not expect 3 argumetn(s)

    Выполнил команду без трех последних аргументов, получилась вот такая интересная вещь-

    https://onedrive.live.com/redir?resid=5058BBA5A7E97A67!637&authkey=!AKUNDw5EWiPZCo8&ithint=file%2c.etl

    28 февраля 2014 г. 11:07
  • используется несколькими пользователями как терминальный сервер для 1С

    Да, вещь интересная за 2,5 минуты было создано 85 сессий, каждая продолжительностью около 2с с четырьмя процессами как это положено logonui, smss, winlogon, csrss.

    почитай, у тебя такая-же ситтуация по внешним признакам, смотри журналы системы и аудита на попытки входа в систему, возможно это вирус


    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers


    • Изменено sergmat 28 февраля 2014 г. 17:42
    • Помечено в качестве ответа Lin_Hei 2 марта 2014 г. 6:59
    28 февраля 2014 г. 12:00
  • Спасибо,буду искать сидеть.

    Можно еще ваши рекомендации по PsCb,так как именно он съедать большую часть пула. 

    https://onedrive.live.com/redir?resid=5058BBA5A7E97A67!638&authkey=!ADMu9fBAEtiBb40&ithint=file%2c.etl

    2 марта 2014 г. 3:42
  • А ничего нового, все тоже самое - за 43 с трассировки было создано 13 таких же пустых сессиий, тег PsCb был закреплен за первым smss (296)  - который отвечает за создание сессий при входе на машину, соответсвенно 13 сессий - 13 выделений памяти с этим тегом. Сессий к этому времени было уже наделано 950 штук, разберешься откуда сессии - решишь проблему.

     


    MCTS: Windows iNTernals

    profile for sergmat at Stack Overflow, Q&A for professional and enthusiast programmers

    • Помечено в качестве ответа Lin_Hei 2 марта 2014 г. 6:59
    2 марта 2014 г. 6:32
  • Огромное спасибо.Пойду искать:)
    2 марта 2014 г. 7:00