오늘 내 서버가 충돌했지만 Too many open files in system:
이미 매우 높은 값을 가지고 있습니다. 이 값의 최대값은 얼마입니까?
나는 Google이 이에 대해 좋은 결과를 얻지 못한 것 같아서 이러한 값을 설정하는 데 필요한 사항을 설명하고 단지 100k로 설정하라고 말합니다.
저는 32GB RAM 서버를 가지고 있고 현재 10GB만 사용하고 있습니다. 파일 제한을 매우 높은 값으로 늘리면 RAM 사용량이 증가할 것이라고 가정합니다. 이를 계산하는 데 사용할 수 있는 공식이 있습니까? 8GB RAM과 마찬가지로 X 파일을 열 수 있나요?
현재 설정:
cat /proc/sys/fs/file-max
100000
ulimit -Hn
1048576
ulimit -Sn
1024
답변1
Kusalananda가 말했듯이 증가는 file-max
메모리 사용량에 직접적인 영향을 미치지 않지만 프로세스가 더 많은 파일 설명자를 열 수 있게 하여 연쇄 효과(커널에서 파일 설명자를 추적하고 메모리 사용량을 늘리는 두 가지 모두)를 갖게 됩니다. 커널 수량). 이러한 설명과 설명자를 사용하는 프로세스) - 커널 주석에서는 각 파일이 약 1KB의 커널 데이터가 되도록 권장하고, file-max
시스템이 결국 메모리(8192)의 10% 이상을 나타내게 되면 기본값(8192)으로 줄어듭니다. 시작(즉RAM은 80MiB에 불과합니다. 커널에 의해 부과되는 최대값은 아키텍처의 C 유형 변수에 저장할 수 있는 최대값입니다 long
.
증가하면 file-max
증가해야 합니다 inode-max
.커널 문서"stdin, stdout 및 네트워크 소켓도 이를 처리하려면 inode 구조가 필요하기 때문에 file-max의 값보다 3-4배 커야 합니다."
클릭하면 file-max
커널 로그 메시지에 "VFS: 파일 최대 제한"이 표시됩니다.N도달", 적절한 값N. 로그에 해당 정보가 없으면 클릭하지 않거나 file-max
로그를 너무 많이 필터링하고 있는 것입니다(정보 수준 로그 메시지입니다).
( file-max
프로세스는 제한되지 않으므로 CAP_SYS_ADMIN
클릭해도 모든 것이 중지되지는 않습니다.)