LabHub

리눅스 장애 대응 · 파일디스크립터와 한도 · 실습

파일디스크립터와 한도 진단

LabHub 에서 이어서 보기

목표

파일디스크립터의 한도가 몇 겹인지 확인하고, fd 누수를 추적하는 도구를 손으로 만듭니다.

왜 중요한가

Too many open files 를 보면 거의 모두가 ulimit -n 65536 을 실행합니다. 그런데 그 값은 내 셸의 값이고 이미 떠 있는 서비스에는 아무 영향이 없습니다. 확인해야 할 곳은 /proc/<PID>/limits 이고, 실제 사용량은 ls /proc/<PID>/fd | wc -l 입니다(lsof -p 는 cwd·실행파일·mmap 라이브러리까지 세는데 이것들은 한도에 포함되지 않습니다). 그리고 한도를 올리는 것이 답인 경우는 드뭅니다 - 대개 누수이고, 그때 한도 상향은 장애를 몇 시간 뒤로 미루는 일일 뿐입니다. 누수인지 부하인지는 fd 수의 증가 패턴으로 구분합니다.

단계

/root/fd 디렉터리에서 작업합니다.

1. /proc/1/limits 에서 열린 파일 한도를 읽어 /root/fd/limits.txt 에 다음 두 줄로 적으세요.

참고

단계 8개

  1. 진짜 한도 읽기
  2. fd 50개 붙잡기
  3. fd 개수와 대상 개수 세기
  4. EMFILE 재현하기
  5. 시스템 전체 상한 읽기
  6. 소켓도 fd 다
  7. fd 상위 프로세스 뽑기
  8. fd 에서 inode 까지 추적