Утечка ресурса — это специфический вид потребления программой, когда программа не освобождает ресурс, который она захватила. Это обычно является ошибкой (багом) в программе. Типичные утечки ресурсов — это утечка памяти и , в частности, утечка дескрипторов файлов, хотя обычно память рассматривается отдельно от других ресурсов.
Проявление утечек Примерами ресурсов, доступных в ограниченном количестве в операционной системе, являются сокеты, файловые дескрипторы, записи в таблице процессов и идентификаторы процессов (PID). Утечка ресурсов часто является второстепенной проблемой, вызывающей некоторое замедление работы системы и система восстанавливается после завершения работы программы. Однако утечка может стать серьёзной проблемой, вызвав и существенное замедление или нестабильность, что приводит к аварийному завершению процесса, в котором произошла утечка, аварийному завершению других процессов или даже к падению системы. Утечки ресурсов часто остаются незамеченными при слабой загрузке и коротком времени работы и проявляются лишь при высокой нагрузке или при работе системы длительное время.
Утечки ресурсов представляют особую проблему для ресурсов, доступных в очень ограниченном количестве. Утечка уникального ресурса, такого как блокировки, особенно серьёзна, поскольку вызывает немедленное исчерпание ресурсов (это не даёт другим процессам получить ресурс) и приводит к взаимной блокировке процессов. Намеренное исчерпание ресурсов может быть использовано в DoS-атаках, таких как форк-бомба, и поэтому утечки ресурсов представляют собой ошибку безопасности.
Причины Утечка ресурсов обычно возникает вследствие ошибок программирования — полученные ресурсы должны освобождаться, но поскольку освобождение часто происходит значительно позже приобретения, а за это время может произойти множество событий (например, возникновение исключения или аварийное завершение программы), легко упустить момент освобождения.
Очень распространенным примером является неудача при закрытии открытых файлов, что ведёт к утечке файлового дескриптора, и то же самое происходит и с . Другим частым примером является отсутствие в родительском процессе вызова для , оставляя завершенный дочерний процесс в состоянии зомби, что приводит к утечке записи в таблице процессов.
Предотвращение и минимизация последствий Утечка ресурсов может быть предотвращена путём — программные техники или конструкции языка могут предотвратить утечку путём своевременного освобождения ресурсов, а отдельный процесс может восстанавливать уже потерянные ресурсы. Многие утечки ресурсов устраняются операционной системой после завершения процесса и системного вызова системного вызова .
Таким образом, утечки ресурсов в первую очередь являются проблемой для долгоживущих процессов, поскольку ресурсы, удерживаемые работающими процессами, часто не восстанавливаются, а также для процессов, которые быстро приобретают и теряют большое количество ресурсов.
См. также , ресурсное голодание Устаревание программ
Примечания
Литература
Категория:Ошибки программирования