열린 파일이 너무 많습니다.

열린 파일이 너무 많습니다.

Lutris를 열고 LOL 클라이언트를 열면 이런 일이 발생합니다. 그리고 게임은 결코 잘 작동하지 않습니다. 여러 가지를 시도했지만 열린 파일 제한을 변경할 수 없습니다. 이 문제를 어떻게 해결할 수 있나요?

Waiting on children  
Waiting on children  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
esync: write: Bad file descriptor  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
esync: write: Bad file descriptor  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  
eventfd: Too many open files  

내 한도 정보도 있어

~$ ulimit -a  
core file size          (blocks, -c) 0  
data seg size           (kbytes, -d) unlimited  
scheduling priority             (-e) 0  
file size               (blocks, -f) unlimited  
pending signals                 (-i) 15106  
max locked memory       (kbytes, -l) 16384  
max memory size         (kbytes, -m) unlimited  
open files                      (-n) 1024  
pipe size            (512 bytes, -p) 8  
POSIX message queues     (bytes, -q) 819200  
real-time priority              (-r) 0  
stack size              (kbytes, -s) 8192  
cpu time               (seconds, -t) unlimited  
max user processes              (-u) 15106  
virtual memory          (kbytes, -v) unlimited  
file locks                      (-x) unlimited  

답변1

"열린 파일이 너무 많습니다" 오류 메시지가 로그에 기록되면 프로세스에 사용 가능한 모든 파일 핸들이 사용되었음을 나타냅니다(소켓도 포함).

대부분의 경우 이는 응용 프로그램의 일부에서 파일 핸들이 유출된 결과입니다. ulimit모든 속성에 대한 시스템 제한을 설정할 수 있는 Unix/Linux의 명령입니다. 귀하의 경우에는 최대 열린 파일 수를 큰 수(예: 1000000)로 늘려야 합니다.

ulimit -n 1000000

또는

sysctl -w fs.file-max=1000000

또는 변경 /etc/security/limits.conf:/etc/sysctl.conf

fs.file-max = 1000000

일정 기간 동안 열린 파일 수가 증가하는지 확인하려면 lsof정기적으로 PID에 대해 열린 파일을 보고하도록 발행하십시오. 예를 들어:

lsof -p [PID] -r [interval in seconds, 1800 for 30 minutes] > lsof.out

이는 다음 명령에 액세스할 수 없는 경우 특히 유용합니다 lsof.

ls -al /proc/PID/fd

ulimit 설정 지침

답변2

달리다

less /proc/PID/limits

최대 열린 파일의 실제 소프트 제한을 확인합니다. ulimit를 설정했지만 실제 숫자가 여전히 낮은 경우 프로세스 시작 방법을 검토하십시오. 예를 들어 systemd는 ulimits를 인계받으며 프로그램이 필요한 런타임 제한을 얻을 수 있도록 프로세스 수준에서 더 나은 명시적 설정을 사용해야 합니다.

답변3

내 생각에는 이런 일이 발생할 수 있는 경우가 여러 가지가 있습니다.

  1. 시스템 전체 제한( cat /proc/sys/fs/file-max제한을 보려면 실행하세요. 제 경우에는 9223372036854775807)
  2. 최대 사용자 인스턴스(실행 cat /proc/sys/fs/inotify/max_user_instances: 이전에는 128)
  3. 하드 사용자 제한(실행 ulimit -nH: 1048576)
  4. 소프트 사용자 제한(실행 ulimit -nS: 이전에는 1024)

1. 시스템 전체 제한

시스템 전체 규칙은 다음을 입력하여 조정할 수 있습니다.

fs.file-max = 9223372036854775807

안으로 /etc/sysctl.conf. 이 값은 나에게 문제가 되지 않았습니다.

2. 최대 사용자 인스턴스

나에게는 이 값이 너무 낮았다. 문제를 해결하려면 이 줄을 다시 추가하거나 편집하세요./etc/sysctl.conf

fs.inotify.max_user_instances = 1024

3. & 4. 하드 또는 소프트 사용자 제한

내 소프트 사용자 제한도 너무 낮았습니다. 이 문제를 해결하려면 /etc/security/limits.conf(루트로) 열고 다음 줄을 추가하세요.

<username>             soft    nofile 100000

(귀하의 사용자 이름으로 바꾸 <username>거나 *모든 사용자에 대해)

하드 사용자 제한은 위 줄의 soft로 대체하여 설정할 수 있습니다. hard물론 하드 및 소프트 제한이나 다른 사용자에 대해 여러 규칙을 가질 수 있습니다.

실행에 옮기기

변경 사항을 적용하려면 로그아웃하고 다시 로그인하는 것만으로도 충분할 수 있지만 확인하기 위해 시스템을 다시 시작했습니다.

관련 정보