시스템 제한이 증가되었음에도 불구하고 데몬의 열린 파일 제한에 도달했습니다.

시스템 제한이 증가되었음에도 불구하고 데몬의 열린 파일 제한에 도달했습니다.

나는 데비안 wheezy를 실행하고 있습니다. 모든 사용자에 대해 파일 제한이 100000으로 늘어났습니다. ulimit -aulimit -Hn/ -Sn화면에서도 최대 열린 파일 제한의 올바른 양을 보여줍니다. 하지만 어떤 이유로 ~4000개 이상의 연결/열린 파일을 가질 수 없습니다.

에서 sysctl.conf:

net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 500 65000
net.core.somaxconn = 81920

출력 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) 256639
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 999999
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) 256639
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

예를 들어 redis:

클라이언트: 100명의 클라이언트를 대상으로 벤치마크

Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Writing to socket: Connection reset by peer
Error: Connection reset by peer

서버 정보:

127.0.0.1:6379> info clients
-Clients
connected_clients:4005
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

자바:

Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(Unknown Source)
java.io.IOException: Too many open files
Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.SelectorProviderImpl.openSocketChannel(Unknown Source)
Caused by: io.netty.channel.ChannelException: Failed to open a socket.
Caused by: java.net.SocketException: Too many open files

ls -l /proc/[id]/fd | wc -l~4000개의 설명자를 표시합니다.

답변1

열린 파일 수를 제한하는 설정에는 프로세스별 제한과 시스템 전체 제한이라는 두 가지 설정이 있습니다. 시스템 전체 제한은 fs.file-maxsysctl에 의해 설정되며, 이는 다음에서 구성할 수 있습니다./etc/sysctl.conf(부팅 시 읽기) 또는sysctl명령을 내리거나 /proc/sys/fs/file-max. 프로세스별 제한은 에 의해 설정됩니다 ulimit -n.

프로세스별 제한은 각 프로세스가 해당 상위 프로세스에서 상속됩니다. 기본값은 다음에서 설정할 수 있습니다./etc/security/limits.conf, 그러나 이는 부팅 시 시작된 데몬이 아닌 대화형 세션에만 적용됩니다. 이는 대화형 세션을 통해 시작된 경우에만 데몬에 적용됩니다.

데몬에 대한 프로세스별 제한을 늘리거나 줄이려면 일반적으로 시작 스크립트를 편집하고 ulimit데몬이 시작되기 직전에 호출을 추가합니다. Debian redis 패키지는 별도의 파일에 구성 설정이 포함되어 있습니다: /etc/default/redis. 해당 행을 주석 처리 ULIMIT=하고 필요한 경우 값을 늘립니다.

관련 정보