저는 데비안 wheeze를 실행하고 있습니다. 사용자당 파일 한도가 100,000개로 늘어났습니다.
ulimit -a
및 ulimit -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
열린 파일 수를 제한하는 설정에는 프로세스별 제한과 시스템 전체 제한이라는 두 가지 설정이 있습니다. 시스템 전체 제한은 sysctl에 의해 설정되며 fs.file-max
다음에서 찾을 수 있습니다./etc/sysctl.conf
(시작시 읽기) 또는 사용sysctl
명령을 사용하거나 를 작성하여 /proc/sys/fs/file-max
프로세스별 제한을 설정합니다 ulimit -n
.
프로세스별 제한은 상위 프로세스의 각 프로세스에 상속됩니다. 기본값은 다음에서 설정할 수 있습니다./etc/security/limits.conf
, 그러나 이는 부팅 시 시작된 데몬이 아닌 대화형 세션에서만 작동합니다. 대화형 세션을 통해 시작된 데몬에만 적용됩니다.
데몬의 프로세스별 제한을 늘리거나 줄이려면 일반적으로 ulimit
데몬이 시작되기 전에 시작 스크립트를 편집하고 호출을 추가해야 합니다. Debian redis 패키지는 별도의 파일에 구성 설정을 제공합니다. /etc/default/redis
. 이 ULIMIT=
줄을 주석 처리하고 필요에 따라 값을 늘립니다.