
지금은 다음 방법을 알고 있습니다.
- 프로세스당 열린 파일 제한을 찾습니다.
ulimit -n
- 모든 프로세스에서 열린 모든 파일을 계산합니다.
lsof | wc -l
- 허용되는 최대 열린 파일 수를 가져옵니다.
cat /proc/sys/fs/file-max
내 질문은: Linux에서 열린 파일 수가 제한되는 이유는 무엇입니까?
답변1
그 이유는 운영 체제가 열려 있는 각 파일을 관리하기 위해 메모리가 필요하고 메모리는 제한된 리소스이기 때문입니다. 특히 임베디드 시스템에서는 더욱 그렇습니다.
ulimit -n
루트 사용자로서 프로세스당(을 통해 ) 및 시스템당(예: ) 최대 열린 파일 수를 변경할 수 있습니다 echo 800000 > /proc/sys/fs/file-max
.
답변2
lsof | wc -l
많은 중복된 항목을 요약한 것입니다(포크된 프로세스는 파일 핸들 등을 공유할 수 있음) . 그 숫자는 에 설정된 제한보다 훨씬 높을 수 있습니다 /proc/sys/fs/file-max
.
Linux 커널의 관점에서 현재 열린 파일 수를 얻으려면 다음을 수행하십시오.
cat /proc/sys/fs/file-nr
예: 이 서버에는 최대 65536개의 열린 파일 중 40096개가 있지만 lsof는 훨씬 더 많은 수를 보고합니다.
# cat /proc/sys/fs/file-max
65536
# cat /proc/sys/fs/file-nr
40096 0 65536
# lsof | wc -l
521504
답변3
나는 그것이 주로 역사적인 이유 때문이라고 생각합니다.
Unix 파일 설명자는 및 int
같은 함수에 의해 반환되고 , , 등에 전달 되는 작은 값입니다.open
creat
read
write
close
적어도 초기 버전의 Unix에서 파일 설명자는 단순히 고정된 크기의 프로세스별 구조 배열에 대한 색인이었습니다. 각 구조에는 열린 파일에 대한 정보가 포함되어 있습니다. 내 기억이 맞다면 일부 초기 시스템에서는 이 테이블의 크기를 20개 정도로 제한했습니다.
보다 현대적인 시스템은 더 높은 한계를 갖고 있지만 관성에서 벗어나 동일한 일반 체계를 유지해 왔습니다.