지구에 거꾸로 매달리기

파일 디스크립터 또는 파일 핸들 확인하기

김승환2015-08-11

자원 누수

프로그래밍할 때 파일을 닫지 않으면 자원 누수가 발생한다. 간단한 테스트만으로는 그런 문제가 있는지조차 모르고 넘어가기 쉽다. 오랫동안 시스템을 운영해야 그 모습을 드러낸다.

다행히 어떤 파일을 닫지 않았는지만 확인할 수 있다면, 대부분은 개발자의 부주의나 실수이기 때문에 쉽게 고칠 수 있다. 리눅스와 윈도우에서 열린 파일을 확인하는 방법을 간단하게 정리했다.

리눅스에서 파일 디스크립터 확인

리눅스에서 어떤 파일이 열려 있는지는 파일 디스크립터(File Descriptor)로 확인한다.

  1. 파일을 연 프로세스 아이디를 확인한다.

ps -ef | grep <키워드>

예를 들어 다음과 같이 프로세스 아이디를 확인할 수 있다.

  1. 파일 디스크립터 디렉터리로 이동한다.

cd /proc/<pid>/fd
  1. ls 명령어로 파일 디스크립터를 확인한다.

ls -al

grep으로 필터할 수 있다.

ls -al | grep .jar

윈도우에서 파일 핸들 확인

윈도우에서 어떤 파일이 열려 있는지는 파일 핸들(File Handle)로 확인한다.

  1. Windows Sysinternals 유틸리티 설치

다음에서 Windows Sysinternals 유틸리티를 내려받아 설치한다. 압축(ZIP)을 풀면 된다. 여기서는 C:\Program Files\SysinternalsSuite 폴더에 설치한 것으로 간주한다.

  1. 명령 프롬프트를 열고 C:\Program Files\SysinternalsSuite 폴더로 이동한다.

  2. 다음 명령어를 실행한다.

C:\Program Files\SysinternalsSuite>handle.exe | findstr /i C:\Users\dimdol

마지막 변수로 상세 폴더를 지정해서 확인 범위를 좁힐 수 있다.