Должна ли утечка памяти всегда приводить к высокому потреблению памяти?

#memory #memory-leaks #memory-leak-detector

#память #утечки памяти #детектор утечки памяти

Вопрос:

Мой клиент использует RHEL, и у них возникла проблема, которая мне кажется утечкой памяти.

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

Итак, мой вопрос в том, что в случае утечки памяти неизбежно ли столкнуться с проблемой потребления памяти? Или могут быть сценарии, в которых утечка памяти может привести ко многим другим проблемам без использования памяти?

Ответ №1:

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

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

  • Какова средняя скорость утечки памяти в байтах в секунду?
  • Каково ожидаемое время жизни программы в секундах?
  • Сколько памяти доступно в системе?

Например, небольшая утилита, пропускающая 1 килобайт в секунду, работающая только в течение 1 секунды на компьютере с 32 ГБ, останется совершенно незамеченной, если вы не профилируете ее. Но если эта же утилита является постоянным демоном на рабочем сервере, это становится проблемой: объем выделяемой памяти будет увеличиваться на 86 МБ в день, и после года безотказной работы демон потеряет 31,5 ГБ, столько же, сколько системной памяти.

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

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

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

Комментарии:

1. Ценю разъяснение. Я искал что-то вроде этого с немного соответствующей справочной информацией.