0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Утечка оперативной памяти: как обнаружить

Утечка оперативной памяти: как обнаружить?

В статье приводится описание способов вычленения такой проблемы как утечка оперативной памяти. Здесь вы ознакомитесь с тем, как убедиться в том, что утечка по памяти присутствует в Windows, и в чём вероятная причина утечки.

Утечка оперативной памяти всегда самый настоящий кошмар для каждого из пользователей. Но среди них прежде всего эта проблема бьёт по разработчикам с одной стороны и по владельцам серверов с другой. Первые сначала разрабатывают “кривое” приложение, на которое впоследствии сыпется куча рекламаций, а вторые мучаются, страдая от лавинообразных потерь в оперативке, в конце концов перезагружая сервера с кучей извинений в адрес клиентов.

Что такое ОЗУ и как ее используют программы?

RAM или Random Access Memory – это тип оперативной памяти компьютера, позволяющий получить доступ к любой ячейке памяти по её адресу. Это энергозависимая память, которую используют программы и операционная система для хранения временных данных. ОЗУ отличается от других типов памяти тем, что хранит данные до выключения системы. Когда вы выключаете компьютер, все данные с ОЗУ удаляются. Итак, как программы используют ОЗУ?

Каждое приложение, которое вы открываете на своем компьютере, использует часть доступной оперативной памяти. Некоторые программы используют больше RAM чем остальные. Другие потребляют так мало, что они едва заметны. Как только вы запускаете программу, эта программа автоматически запрашивает выделение определенного объема памяти из ОЗУ. Это означает, что если у вас есть 4 ГБ оперативной памяти и вы запустите Photoshop, Google Chrome, Spotify, Word и World of Tanks, то оперативной памяти останется очень мало. Это замедлит работу вашей системы. Проблема может усугубиться, если в какой-либо программе есть утечка памяти.

Утечки памяти в Windows 10

Прежде чем начать, вы должны знать, что утечка памяти — это проблема программного обеспечения для отладки — например, в Java, JavaScript, C/C ++, Windows и т. Д. Физическая замена ОЗУ или жесткого диска не требуется.

Почему это плохо

Очевидно, что утечка памяти — это плохо, потому что это ошибка, недостаток в системе. Но давайте выясним, как именно это влияет на систему:

  1. Поскольку память не освобождается, даже когда она не используется, это приводит к ее истощению.
  2. Исчерпание памяти приводит к старению программного обеспечения.
  3. Уменьшение доступной памяти приводит к увеличению времени отклика и снижению производительности системы.
  4. Неконтролируемая утечка памяти может в конечном итоге привести к сбою приложения.

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

Обнаружение утечки

Чтобы решить проблему, нам нужно сначала ее идентифицировать. Основные шаги по обнаружению утечки памяти:

  1. Подтверждение . Определение наличия утечки.
  2. Поиск утечки памяти в режиме ядра . Поиск утечки, вызванной компонентом драйвера режима ядра.
  3. Поиск утечки памяти в пользовательском режиме . Поиск утечки, вызванной драйвером пользовательского режима или приложением.

Распределение памяти

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

  1. Функция HealAlloc для выделения кучи памяти. Эквивалентами времени выполнения C/C ++ являются malloc и новые.
  2. Функция VirtualAlloc для прямого выделения из ОС.
  3. Kernel32 API для хранения памяти ядра для приложения. Пример, CreateFile, CreateThread.
  4. User32 API и Gdi32 API.

Предотвращение утечек памяти

Мы все знаем, что профилактика лучше лечения, поэтому есть несколько способов предотвратить утечку памяти.

Мониторинг привычек

Вы должны следить за ненормальным использованием ОЗУ отдельными программами и приложениями. Вы можете перейти в диспетчер задач Windows, нажав CTRL + SHIFT + ESC и добавить такие столбцы, как дескрипторы, объекты пользователя, объекты GDI и т. Д.

Это поможет вам легко отслеживать использование ресурсов.

Инструменты Microsoft для диагностики утечек памяти

Различные инструменты диагностируют утечки памяти для различных режимов выделения:

  1. Верификатор приложения диагностирует утечки кучи.
  2. UMDH (компонент средств отладки Windows) диагностирует утечки для отдельных процессов, отслеживая выделение кучи памяти.
  3. Trace Capture для тщательного анализа использования оперативной памяти.
  4. Xperf также отслеживает шаблоны распределения кучи.
  5. CRT Debug Heap не только отслеживает выделение кучи, но также позволяет использовать методы кодирования для минимизации утечек.
  6. JavaScript Memory Leak Detector отлаживает утечки памяти в кодах.
Читать еще:  Easy Hack: Хакерские секреты простых вещей. Подцепление на BeEF

Советы по использованию

  1. Используйте ядра HANDLE и другие умные указатели для ресурсов Win32 и выделения кучи.
  2. Получите классы для автоматического управления ресурсами для выделения ядра из библиотеки ATL. Стандарт C ++ имеет auto_ptr для распределения кучи.
  3. Инкапсулируйте указатели COM-интерфейса в «умные указатели» с помощью _com_ptr_t или _bstr_t или _variant_t .
  4. Мониторинг кода .NET на предмет ненормального использования памяти.
  5. Избегайте множественных путей выхода для функций, чтобы к концу функции освободить выделения из переменных в большинстве блоков.
  6. Используйте собственные исключения только после освобождения всех выделений в блоке _finally. Оберните всю кучу и обработайте выделения в интеллектуальные указатели, чтобы использовать исключения C ++.
  7. Всегда вызывайте функцию PropVariantClear перед повторной инициализацией или удалением объекта PROPVARIANT.

Устранение утечек памяти в Windows

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

1] Закройте процессы и перезапустите.

Если вы видите, что ненужный процесс занимает слишком много ОЗУ, вы можете завершить процесс в диспетчере задач. Вам нужно будет перезагрузить устройство, чтобы освободившееся пространство было доступно для использования другими процессами. Без перезагрузки проблема утечки памяти не будет решена. Одним из конкретных процессов, которые имеют ошибки для замедления работы ПК, является Runtime Broker. Попробуйте, если отключение, которое само по себе работает.

2] Инструменты диагностики памяти

Чтобы получить доступ к встроенному инструменту диагностики памяти для Windows:

  1. Сохраните всю вашу важную работу.
  2. Нажмите Win + R , чтобы открыть окно Выполнить .
  3. Введите команду mdsched.exe в окне Выполнить .
  4. Перезагрузите компьютер.
  5. После перезапуска выполните базовое сканирование или выберите параметры Расширенные , например Test mix ’или Количество проходов ’.
  6. Нажмите F10 , чтобы начать тестирование.

Это все еще временные исправления.

3] Проверить обновления драйверов

Устаревшие драйверы вызывают утечки памяти. Держите все драйверы обновленными:

  1. Нажмите Win + R и откройте окно Выполнить . Введите devmgmt.msc и нажмите Enter. Вы попадете в Диспетчер устройств .
  2. Проверьте устаревшие драйверы и обновите их все.
  3. Для обновлений, которые вы могли пропустить, проверьте в Центре обновления Windows.

Это было просто.

4] Оптимизация производительности

Настройка Windows на производительность будет управлять всем, включая планирование процессора и использование памяти, чтобы предотвратить утечки памяти. Следуй этим шагам:

  1. Нажмите правой кнопкой мыши на Этот компьютер ’и выберите настройки Дополнительно на левой панели.
  2. На вкладке « Дополнительно » перейдите в раздел « Эффективность «, а затем « Настройки «.
  3. Установите флажок Настроить для лучшей производительности и нажмите ОК .
  4. Перезапустите и проверьте, решена ли проблема.

Если это простое решение не сработало, попробуйте следующее решение.

5] Отключить программы, запускаемые при запуске

Отключение проблемных программ — единственный способ избавиться от проблемы утечки памяти. Зайдите в диспетчер задач и отключите программу, создающую проблемы. Если вы не знаете, какие программы создают проблемы, сделайте следующее:

  1. Перейдите в Диспетчер задач .
  2. Перейдите в « Запуск «.
  3. Отключите автозапуск программ, которые вам не нужно запускать по умолчанию.

6] Дефрагментация жесткого диска

Хотя Windows 10 делает это для вас автоматически, вам может понадобиться время от времени выполнять дефрагментацию жестких дисков для оптимизации производительности:

  1. Перейдите на страницу « Этот компьютер » или « Мой компьютер «.
  2. Щелкните правой кнопкой мыши системный жесткий диск (обычно диск C:).
  3. Перейдите на вкладку Инструменты и выберите Свойства ‘и выберите Оптимизировать ’.
  4. Выберите диск для дефрагментации и выберите « Анализировать ».

Перезагрузите компьютер после новой фрагментации.

7] Файл ClearPage при завершении работы

Сейчас становится все сложнее, но не волнуйтесь. Вот как очищать файл подкачки при каждом выключении:

  1. Введите regedit в поле поиска, чтобы запустить редактор реестра.
  2. Введите этот путь: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  3. Измените значение ClearPageFileAtShutDown на «1».
  4. Сохраните изменения и перезагрузите устройство.

Это должно сделать это.

9] Отключить суперпатч

Этот сервис Windows оптимизирует производительность за счет минимизации времени загрузки. Это позволяет Windows управлять использованием оперативной памяти. Жизнь после отключения Superfetch не удобна, но сделайте это, если нужно. По крайней мере, попробуйте это в одиночку, чтобы изолировать проблему:

  1. Найдите services.msc и перейдите в диспетчер служб.
  2. Найдите Superfetch и нажмите его правой кнопкой мыши, чтобы перейти в Свойства .
  3. Выберите « Стоп ».
  4. Также Отключить ’сервис из раскрывающегося меню.
  5. Перезагрузите компьютер и проверьте, не улучшилась ли производительность.

Включите Superfetch, если этот не работает.

10] Проверка на наличие вредоносных программ

Используйте стороннее антивирусное программное обеспечение или встроенный в Windows 10 Защитник Windows для сканирования и устранения вредоносных программ.Убедитесь, что антивирус обновлен для поддержки вашей ОС, чтобы он не стал причиной утечки памяти.

Читать еще:  Ноутбук обновился и не включается windows 10. Не загружается Windows после установки обновлений. Чистка компьютера от пыли

Каждое решение, которое вам когда-либо понадобится, чтобы найти или предотвратить утечку памяти, находится здесь. Вы можете прочитать больше об утечках памяти на MSDN и Microsoft.

Как исправить утечку памяти в Windows 10?

Если вы обнаружили утечку памяти на вашем устройстве, вы должны исправить утечку памяти немедленно, чтобы спасти ваше устройство от повреждения. Утечка памяти — это проблема, которую должны решить разработчики продукта. Вот некоторые из способов, которыми вы можете попытаться решить Утечка памяти в Windows 10.

Решение 1. Мониторинг запущенных процессов

Диспетчер задач — отличное место для отслеживания текущих процессов и того, сколько ресурсов они занимают на вашем устройстве. Используйте сочетание клавиш Ctrl + Shift + Esc запустить диспетчер задач и использовать этот инструмент для мониторинга приложений, запущенных на вашем устройстве.

Закройте ненужные процессы, которые занимают слишком много оперативной памяти. Вы можете щелкнуть правой кнопкой мыши по любому дереву процессов, чтобы открыть контекстное меню, и выбрать «Завершить задачу», чтобы убрать неприятный процесс. Один конкретный процесс, который, как известно, вызывает ошибки, является посредником времени выполнения. Посмотрите наше руководство, как исправить использование памяти в среде выполнения брокером.

Решение 2. Проверьте наличие обновлений драйверов

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

Открыть Бегать диалог, нажав Win + R. Тип devmgmt.msc и нажмите Войти запустить диспетчер устройств.

Здесь проверьте наличие устаревших драйверов устройств, а затем обновите их, щелкнув правой кнопкой мыши по ним и выбрав Обновить Водитель из контекстного меню.

Решение 3: инструмент диагностики памяти

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

Чтобы запустить и запланировать сканирование памяти, выполните следующие действия:

  1. Открыть Бегать окно нажатием Win + R.
  2. Тип mdsched.исполняемый файл и нажмите Enter, чтобы запустить инструмент диагностики памяти.
  3. В запросе вас спросят, хотите ли вы перезагрузить устройство. Сохраните всю вашу важную работу и нажмите Перезагрузите сейчас и проверьте наличие проблем (рекомендуется).
  4. После перезагрузки выполните базовое сканирование или выберите дополнительные параметры, такие как likeТестовое заданиесмешивать» или ‘Проходятрассчитывать». Нажмите F10 начать тест.

Диагностический инструмент отсканирует и исправит поврежденные сектора в модуле памяти и может в конечном итоге исправить утечку памяти на вашем устройстве.

Решение 4. Проверьте на наличие вредоносных программ

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

Если у вас уже есть антивирусное программное обеспечение премиум-класса, вы можете использовать его для сканирования на наличие вредоносных программ. Кроме того, вы можете выбрать один из других бесплатных вариантов, таких как Malwarebytes, которые могут сделать основы бесплатно.

Решение 5: дефрагментация вашего жесткого диска

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

  1. На вашем устройстве дважды щелкните Этот ПК.
  2. Щелкните правой кнопкой мыши на любом из разделов жесткого диска. Вы можете начать с системного раздела (обычно C: )
  3. Выбрать свойства из контекстного меню.
  4. Под инструменты вкладку, нажмите на Оптимизировать кнопка под Оптимизировать и дефрагментировать диск

После того, как вы будете следовать инструкциям на экране, перезапустите устройство, чтобы сохранить новые фрагменты.

Решение 6. Очистите Pagefile.Sys при завершении работы с помощью реестра

Вы можете использовать этот простой инструмент реестра, чтобы очистить PageFile.sys, который Windows использует в качестве виртуальной памяти. Когда в Windows заканчивается физическая память, она использует файл подкачки, записывая часть памяти на диск. Снятие этого значения приведет к увеличению времени выключения вашего устройства, но распределение памяти улучшится.

  1. Открыть Бегать окно нажатием Win + R.
  2. Тип смерзаться и нажмите Войти запустить редактор реестра. Нажмите на да в приглашении контроля учетных записей.
  3. Перейдите по следующему пути, вставив это местоположение в адресную строку редактора реестра.
    Компьютер HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control Диспетчер сеансов Управление памятью
  4. Найдите и дважды щелкните ClearPageFileAtShutdown изменить его значение.
  5. Измените его значение на 1.

  1. Начать сначала твое устройство.

Способы лечения

  1. Заблаговременная подготовка
    • использовать наш инструмент http://www.gilev.ru/memcontrol/
    • до максимума увеличить объем памяти
    • перейти на 64-битную платформу 1С:Предприятие
  2. По факту
    • Перейти на актуальный релиз платформы
    • Рестартовать службу или перезагрузить сервер
    • Собрать наиболее полную информацию в технологическом журнале и дампах при падениях rphost и выслать в службу технической поддержки
    • Выполнить оптимизацию кода и запросов
Читать еще:  Поменять термопасту на ноутбуке hp. Инструкция с фото: Как самостоятельно почистить ноутбук от пыли и заменить термопасту на процессоре

Специального софта, с помощью которого можно проверить ОЗУ, много. Один из таких инструментов — memtest86+ — эффективен и бесплатен.

Как работать с программой:

  • Записать образ на носитель, создав загрузочную флешку/диск.
  • Вставить накопитель в привод или порт, чтобы он читался в BIOS.
  • Выбрать загрузочный девайс.
  • Сохранить настройки.
  • Приложение загрузится, и останется только подождать: все действия будут выполняться в автоматическом режиме.

По завершению тестирования пользователь получит отчет.

Совет: лучше проверять каждую планку памяти по отдельности. Для этого придется вытащить один модуль из ПК.

Как вы, вероятно, знаете, файл подкачки является продолжением оперативной памяти компьютера и представляет собой скрытый файл pagefile.sys на системном диске, в который Windows сбрасывает данные неиспользуемых (но запущенных) программ из оперативной памяти.

По-умолчанию размером файла подкачки в Windows 10 управляет система (и это нормально). Есть рекомендации MSFT (упрощенные), что в современных Windows рекомендует задавать начальный (минимальный) размер файла подкачки равный количеству физической памяти (RAM), установленной на компьютере. При этом максимальный размер файла подкачки ограничивается трехкратным объемом физической RAM. Однако эти рекомендации часто нарушаются самими пользователями или всяческими «оптимизаторами системы». В том случае, если размер доступного места в данном файле недостаточен для размещения новых страницы данных запущенных приложения, Windows может выдавать предупреждения о недостаточности памяти компьютера.

Чтобы избежать появления предупреждения, проверить, что файл подкачки включил и изменить минимальный и максимальный размер файла подкачки.

  1. Откройте свойства системы (sysdm.cpl)
  2. Перейдите на вкладку Дополнительно и нажмите кнопку Параметры.
  3. Затем перейдите на вкладку Дополнительно и нажмите кнопку Изменить
  4. В окне «Виртуальная память» проверьте, что установлена галку «Автоматически выбирать объем файла подкачки» и что файл подкачки не отключен (опция Без файла подкачки), если нет — включите файл подкачки, верните галку, либо увеличьте исходный и максимальный размер файла подкачки до как минимум 1xRAM и 3xRAM Мб соответственно (убедитесь, что на диске достаточно места для размещения файла подкачки).

Почему возникают проблемы с нехваткой памяти

Компьютер имеет два вида памяти: оперативную память (ОЗУ) и виртуальную память. Все программы используют оперативную память, но когда для запуска программы не хватает памяти, Windows временно перемещает информацию, которая обычно хранится в оперативной памяти, в файл на жестком диске, который называется файлом подкачки.

Объем информации, который временно хранится в файле подкачки, также называется виртуальной памятью. Использование виртуальной памяти или, другими словами, перемещение информации в / из файла подкачки позволяет освободить достаточно оперативной памяти для надлежащего запуска программ.

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

Проблемы с нехваткой памяти могут возникать, когда программа не освобождает память, которая ей больше не нужна. Эта проблема называется чрезмерным использованием памяти или утечкой памяти.

Статический и динамический анализ

На примере PVS-Studio видно, что статические анализаторы умеют выявлять различные виды утечек ресурсов. Однако, ради справедливости следует отметить, что в целом статические анализаторы проигрывают в сфере поиска утечек динамическим анализаторам кода.

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

Динамическим анализаторам найти утечки памяти или ресурсов намного проще. Им не надо ничего отслеживать. Им надо только запомнить место в программе, где какой-то ресурс выделен и проверить, освободится ли он до окончания программы. Если нет, то найдена ошибка. Таким образом, динамические анализаторы точнее и надёжнее обнаруживают различные виды утечек.

Из вышесказанного вовсе не следует, что динамический анализ мощнее, чем статический. У методологии динамического анализа, как и у методологии статического анализа, есть как свои преимущества, так и свои недостатки. Конкретно в сфере утечек динамические анализаторы мощнее. В других областях, например в поиске опечаток или недостижимого кода, они малоэффективны или вовсе бесполезны.

Не следует противопоставлять статический и динамический анализ. Эти методики не конкурируют, а дополняют друг друга. Решая вопросы повышения качества и надёжности кода, следует использовать инструменты обоих типов. Про это я много раз писал и мне не хочется повторяться. Тем, кто хочет разобраться в этом вопросе подробнее, предлагаю несколько ссылок:

Ссылка на основную публикацию
Статьи c упоминанием слов:

Adblock
detector