none
Утечка физической памяти RRS feed

  • Вопрос

  • Добрый день, коллеги!

    Кто может подсказать, как расследовать причину утечки физической памяти. Виртуальная память при этом в норме.

    Соответственно, если смотреть память по процессам в proces explorer, то там тоже все нормально. Главное, не понятно кто, занял и чем занял.


    • Изменено agibalovsa 11 мая 2017 г. 8:13

Все ответы

  • А её у вас нет - утечки.

    System Cache - это та память, которую система всегда готова предоставить приложениям, а пока она им не нужна (как у вас - из 32ГБ установленной памяти ядру и приложениям реально требуется только 7) - использует для других целей, например (и в основном) - чтобы хранить копии содержимого файлов на дисках, которые открывались приложениями. А так как памяти свободной до фига, то хранит она там всё, что туда попало, не заморачивась, нужно это или нет.

    PS Система у вас - 64-битная, не так ли? Если это не Win2K3 x64, то вы поместили сообщение не в то раздел.


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

  • это та память, которую система всегда готова предоставить приложениям
    А разве вы не про stanby память говорите? Так она как раз в
    Physical memory учтена в пункте Available, а не System Cache.  Обычно изменение памяти System commit и Physical memory идут синхронно. System commit всегда немного больше (из-за файла подкачки). Но когда наблюдается такой дисбаланс, как на картинке из первого сообщения и когда у Physical memory кончается свободная память, а System commit при этом остается также доступной система начинает просто виснуть. Наблюдал такое уже не раз. Даже определил процесс, после удаления которого память освобождается. Просто сейчас хочется разобраться в следствие чего это происходит и как определить кто виновник, не убивая процессы)). В process explorer в дереве процессов по Private Bytes/Working Set вообще не видно кто конкретно ест память, там как будто все хорошо.

    ОС Windows Server 2003.

    Прикладываю скриншот Windows 7 когда память расходуется адекватно.






    • Изменено agibalovsa 12 мая 2017 г. 10:10
  • Нет, я говорю не про простаивающую(standby) память (т.е. страницы адресного пространства процессов, выведенные из рабочего набора) а про кэш файловой системы. Большой такой он у вас потому, что в системе много памяти, и большая часть её процессами вообще не используется. Чтобы посмотреть, что у вас лежит в кэше, используйте rammap - в ней есть такая возможность.

    System commit - это как раз тот объём виртуальной памяти, которую вообще запросили для себя процессы. От объёма физической памяти он, вообще говоря, не зависит (кроме верхнего предела, который равен сумме физической памяти и размеров всех файлов подкачки). Сейчас процессам в вашей системе нужно значительно меньше памяти, чем есть, потому такая картина.


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


    • Изменено M.V.V. _ 12 мая 2017 г. 12:30
  • Вот как раз Rammap и не могу воспользоваться, т.к. он работает начиная с семейства Windows NT 6. Может вы знаете другие утилиты?

    • Изменено agibalovsa 12 мая 2017 г. 13:42
  • Обычно изменение памяти System commit и Physical memory идут синхронно. 

    Прикладываю скриншот Windows 7 когда память расходуется адекватно.

    1. Вовсе не обязательно. Зависит от запущенных программ.

    2. Это не "адекватное использование", а картина нехватки оперативной памяти.

    Модератор
  • 2. Может не совсем удачный скрин, но для моей рабочей станции вполне адекватное использование. Это запущенная опера на движке хромиум, и еще скайп, что тут  уж сделаешь. А чтобы судить есть ли нехватка или нет, нужно смотреть на очередь к диску и Page Fault, у меня пока эти показатели в норме. И трудностей в работе не ощущается.

    1. Вот только на сервере, где проявляется такое поведение памяти как из 1го сообщения, наблюдаются проблемы, когда System Cache съедает все. А вот на серверах, где с памятью проблем нет, картина всегда примерно одна и та же:

    1.

    2.

     

    3.

    и т.д. Могу еще 3-4 серверов привести примеры, везде одно и то же. Запущены примерно одни  и те программы. Единственное отличие, что проблема на сервере 2003, а скриншоты с серверов WinОС более высоких версий.

    Так вот. Очень все таки хочется понять, под что занимается память System Cache, с помощью каких утилит на Windows Server 2003 это можно увидеть? Rammap на 2003 не работает. Есть еще vmmap, но он показывает только по указанным процессам.




    • Изменено agibalovsa 14 мая 2017 г. 12:57
  • Вроде ответ на свой вопрос я нашел:

    https://books.google.ru/books?id=nTLsAdXhsbYC&pg=PA434&lpg=PA434&dq=память+Windows+"system+cache"&source=bl&ots=QagoHzttSL&sig=7GRTGcibZsmPijT8xxuTrrtNckA&hl=ru&sa=X&ved=0ahUKEwikxaelue_TAhXIliwKHSLqDTEQ6AEIRTAF#v=onepage&q&f=false

    https://support.microsoft.com/ru-ru/help/976618/you-experience-performance-issues-in-applications-and-services-when-the-system-file-cache-consumes-most-of-the-physical-ram


    • Изменено agibalovsa 14 мая 2017 г. 15:18
  • System Cache - это, на самом деле, - системный рабочий набор, включающий в себя, помимо файлового кэша ещё и подкачиваемый пул, подкачиваемый код и данные ядра (ntoskrnl.exe) и драйверов и проецируемые системой представления (см. Windows Internals, 4-е издание, гл. 7).

    Смотреть, в чём у вас там проблема, нужно именно тогда, когда проблема есть, т.е. - когда "System Cache съедает всё". Сейчас там у вас всё нормально. Наиболее подозрительная в данном плане часть - это подкачиваемый пул, из которого действительно часто происходит утечка памяти. Факт утечки видно по размеру подкачиваемого пула, а источник такой утечки ловят с помощью poolmon.exe по тегам распределённой в пуле памяти. Что касается других компонентов, то файловый кэш обычно проблемы не создаёт - он автоматически уменьшается (впрочем, если для уменьшения требуется записать его на диск, а диск не успевает записывать, то проблемы возможны), а все остальные компоненты имеют ограниченный размер.

    На размер рабочего набора системы влияет настройка Large System Cache, которую можно включить или выключить: Свойства системы, вкладка Дополнительно, окно по кнопке Параметры в группе Быстродействие, в нём на вкладке Дополнительно - группа использование памяти.

    А вот чем можно смотреть, кроме отладчика, я не подскажу.

    PS По поводу рабочей станции: там тоже всё в порядке. Просто на ней физической памяти меньше установлено, чем запрашивают виртуальной памяти все запущенные процессы - но это не страшно, т.к. часть этой памяти процессы используют от случая к случаю, и эта часть спокойно лежит в выгруженном виде в страничном файле.


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



    • Изменено M.V.V. _ 14 мая 2017 г. 15:29