file descriptor란?
리눅스 시스템에서는 모든 것이 파일이다. 리눅스에서는 프로세스가 파일에 접근할 때 File Descriptor 라는 개념을 이용하여 접근한다.
POSIX를 구현한 시스템은 모두 File Descriptor 개념이 있다. (일부 윈도우 운영체제 버전은 POSIX를 구현하지 않고 있다)
왜 알아야하지?
왜 file descriptor에 대해서 알아야할까? 이유는 서버가 장애로 이어질 수 있는 원인들중 하나이기 때문이다.
참고로 file 이라는 단어가 들어갔다고 해서, 폴더안에 담기는 파일만을 의미하지는 않는다.
위에서 설명했다시피 소켓도 파일의 일종으로 리눅스 관점에서 볼 수 있기 때문에, 백엔드 개발자와 연관이 깊은 리눅스의 자원이라고 할 수 있다.
리눅스에서는 프로세스당 생성할 수 있는 file descriptor의 갯수가 정해져 있다. (ulimit -a, ulimit -aH 전자는 소프트 리밋, 후자는 하드 리밋)
소프트 리밋은 유저당 생성할 수 있는 최소파일 갯수를 의미하고 하드리밋은 최대 파일 갯수를 의미한다.
만약 서버의 자원은 충분한데 unable to create native thread or too many open files 라는 메시지가 출력된다면, file descriptor의 갯수가 충분한지 의심해볼 필요가 있다.
'서버' 카테고리의 다른 글
소규모 팀에서의 Spring 사용법 (패키지 구조, 테스트 코드를 중심으로) (0) | 2023.07.03 |
---|---|
CPU Burst, IO Burst (0) | 2023.06.29 |
간단하고도 빠른 서버 성능 최적화 (node js를 중심으로) (0) | 2023.05.04 |
HTTP 프로토콜이 만들어진 이유 (1) | 2022.09.11 |
Scale out에 적합한 로그인 환경에 대해 검토한 글 (2) | 2022.09.11 |