유저별 open된 fd(file descriptor)의 정확한 값은 lsof로 확인하기는 어렵다.
각 프로세스들이 공유라이브러리 등을 공유해서 사용하는 등의 이유로 lsof에 중복되서 표기되는 요소들이 많기 때문이다.
즉, 실제 fd 보다 높게 표기되는 경향이 있다.
따라서 /proc 파일시스템의 각각의 process number(특정 유저 소유의) 아래의 fd 디렉토리 내의 것들의 합해야 특정 유저의 정확한 fd 값을 산출할 수 있다.

예를 들어 testuser 유저의 프로세스 중 프로세스 넘버가 12354가 있다면 아래와 같이 값을 구해야 한다.
# ls /proc/12354/fd/ | wc -l
11

따라서 여러개의 프로세스를 실행하고 있는 유저의 모든 fd 값을 합산하기 위해서는 스크립트의 도움이 필요하다.

아래는 특정 유저의 fd (file discripter) 현황을 출력해주는 스크립트다.

 

스크립트 내용

# cat userfd.sh

– 스크립트 실행 인자로 받은 특정 유저의 pid를 모두 구해서 for loop 문에 값을 넣어 각각 출력 후 최종적으로 합한 값을 출력함.

 

사용 방법

– 스크립트 실행 시 인자값으로 username(testuser에서 원하는 명으로 변경)을 넣어주면 됨.
# ./userfd.sh testuser
0 for PID: PID
4 for PID: 12355
4 for PID: 6469
11 for PID: 12354
11 for PID: 6468
30 is total (testuser)

 

– total 값만 확인 시 사용법
# ./userfd.sh testuser | tail -1
30 is total (testuser)

리눅스 유저별 fd 값 산출하기

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다