자원 누수
Resource leak컴퓨터 과학에서 자원 유출은 컴퓨터 프로그램이 획득한 자원을 방출하지 않는 특정 유형의 자원 소비입니다.이 상태는 보통 프로그램 버그로 인해 발생합니다.일반적인 자원 누수에는 메모리 누수와 핸들 누수, 특히 파일 핸들 누수가 포함됩니다.다만, 메모리는 다른 [1]자원과는 별개로 간주되는 경우가 많습니다.
운영 체제에서 제한된 수의 리소스를 사용할 수 있는 예로는 인터넷 소켓, 파일 핸들, 프로세스 테이블 항목 및 프로세스 식별자(PID)가 있습니다.자원 누수는 대부분의 경우 사소한 문제이며, 사소한 속도 저하를 일으켜 프로세스가 종료된 후 복구됩니다.그 외의 경우 자원 누수가 큰 문제가 되어 자원 부족, 심각한 시스템 속도 저하 또는 불안정, 누출 프로세스, 기타 프로세스, 심지어 [2]시스템까지 손상시킬 수 있습니다.자원 누수는 부하가 적고 실행 시간이 짧을 때 알아차리지 못하는 경우가 많습니다.이러한 문제는 시스템 부하가 높거나 장시간 가동 [3]중인 시스템에서만 발생합니다.
자원 누수는 특히 매우 적은 양으로 이용 가능한 자원의 경우 문제가 됩니다.잠금과 같은 고유한 리소스 누출은 특히 심각합니다. 이는 즉각적인 리소스 부족(다른 프로세스가 리소스를 획득하지 못하게 함)을 일으키고 교착 상태를 초래하기 때문입니다.의도적인 자원 누출은 포크 폭탄 등의 서비스 거부 공격에 사용될 수 있으므로 자원 누출에 의해 보안 버그가 발생합니다.
원인들
자원 누수는 일반적으로 프로그래밍 오류로 인해 발생합니다.취득한 자원을 해방해야 하지만, 취득 후에 해방되는 경우가 많고, 그 사이에 많은 일이 발생할 수 있기 때문에(예외가 느려지거나 프로그램이 비정상적으로 종료되는 등) 릴리스는 놓치기 쉽습니다.
열려 있는 파일을 닫지 못해 파일 핸들이 누수되는 경우가 자주 있습니다.이것은 파이프에서도 발생합니다.또 하나의 일반적인 예로는 부모 프로세스가 자 프로세스에서 콜 대기하지 못하여 완료된 자 프로세스가 좀비 프로세스로 남아 프로세스 테이블엔트리가 누출되는 경우가 있습니다.
예방 및 경감
자원 누수는 자원 관리를 통해 방지 또는 수정할 수 있습니다.프로그래밍 기술이나 언어 구성에서는 자원을 신속하게 해방함으로써 누수를 방지할 수 있습니다.또한 다른 프로세스로 유출된 자원을 회수할 수도 있습니다.많은 리소스 누수는 프로세스가 종료되고 프로세스가 종료된 후 운영체제에 의한 리소스 재확보에 의해 수정됩니다.exit
시스템 콜을 실행합니다.
따라서 자원 누수는 장기간의 프로세스에서 주로 문제가 됩니다.이는 프로세스가 아직 실행 중인 유출된 자원을 회수하지 못하는 경우가 많기 때문입니다.또한 많은 자원을 신속하게 취득하여 유출하는 프로세스도 마찬가지입니다.
「 」를 참조해 주세요.
레퍼런스
- ^ 를 클릭합니다Deitel, Harvey M.; Deitel, Paul J. (2005), C# for Programmers (2nd ed.), Prentice Hall Professional, p. 443, ISBN 9780132465915.
- ^ 를 클릭합니다Russinovich, Mark; Solomon, David; Ionescu, Alex (2012), Windows Internals, Part 1 (6th ed.), Pearson Education, p. 279, ISBN 9780735671300.
- ^ 를 클릭합니다Gregory, Kate (1998), Using Visual C++ 6, Que Publishing, p. 590, ISBN 9780789715395.