[windows/linux] FD(File Descriptor) 확인하기
그동안 linux 환경에서 실행되는 application 들을 주로 다루었는데, 최근들어 windows 환경에서 실행되는 application 이 신규 개발되고 있다.
linux 환경에서 실행되는 application에서 제품 안정성 시험을 진행할 때, 다양한 지표(memory, cpu, processing time, restart 여부, 등..)를 통해 제품 이상 여부를 확인하고 있는데, 그 중 FD(File Descriptor) Leak이 없는지를 보는 지표도 포함되어 있다.
linux의 경우 FD 수를 체크하고 FD 목록을 확인하는 방법이 command로 쉽게 가능한데, windows 에서는 경험이 없어서 좀 알아보는 중이다. OS 별로 현재 알고 있는 정보는 아래와 같다.
Windows
(1) 설치
아래 url 에서 sysinternal 제품의 zip 파일을 다운로드 하여 압축을 풀고 적절한 경로에 폴더를 복사하여 사용한다.
https://learn.microsoft.com/ko-kr/sysinternals/downloads/sysinternals-suite
(2) 전체 목록 확인하기
C:\Program Files\SysinternalsSuite>handle.exe
(생략...)
------------------------------------------------------------------------------
ctfmon.exe pid: 15504 DESKTOP-ABC\Administrator
40: File (RW-) C:\Windows\System32
128: File (R-D) C:\Program Files\WindowsApps\Microsoft.LanguageExperiencePackko-KR
330: Section \Sessions\1\BaseNamedObjects\8534
4AC: Section \BaseNamedObjects\__ComCatalogCache__
4B8: Section \BaseNamedObjects\__ComCatalogCache__
5FC: Section \Sessions\1\BaseNamedObjects\CTF.AsmListCache.FMPDefault1
684: Section \Windows\Theme3789119081
74C: Section \Sessions\1\Windows\Theme87216714
------------------------------------------------------------------------------
(생략...)
(3) 특정 app으로 검색하기
C:\Program Files\SysinternalsSuite>handle.exe | findstr /i ctfmon.exe
-> 이 방법은 string 매치로 실행 파일의 PID를 확인하는 방법은 되지만, 상세 FD 목록은 위 (2)번으로 확인하는 방법 외에는 아직 잘 모르겠다..
Linux
(1) process pid 확인하기
$ ps ax | grep '{process name}'
# e.g.
$ ps ax | grep storescp
6141 ? S 0:32 storescp +xa +uf -xs -od /home/blog/recv --aetitle jinakim 10101 -fe .dcm
22361 pts/2 S+ 0:00 grep --color=auto jinakim
-> 위 예시에서 pid = 6141 을 확인
(2) pid로 fd 목록 조회하기
$ls -al /proc/{pid}/fd
# 예시
$ls -al /proc/6141/fd
합계 0
dr-x------ 2 root root 0 11월 14 21:58 .
dr-xr-xr-x 9 root root 0 11월 14 21:58 ..
lrwx------ 1 root root 64 1월 10 14:38 0 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64 1월 10 14:38 1 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64 11월 14 21:58 2 -> /dev/pts/0 (deleted)
lrwx------ 1 root root 64 1월 10 14:38 3 -> socket:[66723]
(3) FD 수 검색하기
$ ls -al /proc/{pid}/fd | wc -l
# 예시
$ ls -al /proc/6141/fd | wc -l
7
-> pid 6141 의 fd 수는 7-3 = 4개로 볼 수 있다. (3개를 빼는 이유는 위 (2)번 출력에서 3줄을 제외하기 위함)