Утечки памяти (memory leak)

Куда утекает память?

Никуда она не утекает, просто неудачный термин. Правильнее говорить об «отложении» или «пластовании» ресурсов, по аналогии с осадочными слоями.

 

Утечка памяти ( memory leak) - это процесс неконтролируемого уменьшения объёма свободной RAM ) , связанный с ошибками в работающих программах, вовремя не освобождающих ненужные уже участки памяти, или с ошибками системных служб контроля памяти. (Википедия)

 

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

 

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

Для дефграментации памяти используют чаще всего используют системные утилиты.

Классификация утечек применительно к 1С:Предприятие

  1. По логическому источнику
    • В результате ошибок механизма платформы — могут исправить только в 1С
    • Созданы логикой кода конфигурации — может исправить 1С-специалист
  2. По архитектуре
    • На клиенте 1С:Предприятие
    • На сервере
      • – В рабочем процессе rphost
      • – Системные сервисы (ragent, rmngr)

Симптомы

  1. Падения платформы, разрыв соединения с сервером падение платформы
    (однако причины данной ошибки могут разниться, подробней здесь)
  2. Не выгружается dt
  3. Необъяснимы рост занимаемой памяти процессами 1С
    утечка

Причины

  • Результат неправильного управления памятью (ошибки программирования), наиболее подвержены приложения на «неуправляемом» коде, в том числе 1С:Предприятие
  • Недостаточно доступной памяти. Адресное пространство процесса небезгранично и на 32-битных платформах по умолчанию составляет чуть менее 2 Гб
  • Ошибки в коде конфигурации
    • Циклические ссылки — взаимный вызов процедур и объектов
    • Не верное размещение объявлений видимости переменных и объектов
  • «Псевдо-утечки» — по существу, не являются утечками, но могут вызывать некоторое беспокойство, если вы не понимаете, куда расходуется ваша память

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

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

Взаимосвязь утечек с надежностью (качеством) решения

В 1973 году Ф. Локвуд Моррис [2] воспользовался выражением «заслуживающее доверия программное обеспечение» (trustworthy software)  «продукт заслуживает доверия, если считаем, что вероятность наличия в нем изъяна, потенциально ведущего к существенным потерям, приемлемо низка».

Обычно влияние утечек низкое, если сравнивать с болезнями, то это «насморк». Стоимость работ дороже результата.

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

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