Ich verwende Debian Wheezy. Die Dateilimits sind für jeden Benutzer auf 100.000 erhöht.
ulimit -a
Und ulimit -Hn
/ -Sn
zeigt mir die korrekten Mengen der maximal offenen Dateilimits sogar auf dem Bildschirm an. Aber aus irgendeinem Grund kann ich nicht mehr als ~4000 Verbindungen / offene Dateien haben.
aus 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
Ausgabe von 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
zum Beispiel Redis:
Kunde: Benchmark mit 100 Kunden
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
Serverinfo:
127.0.0.1:6379> info clients
-Clients
connected_clients:4005
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
Java:
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
zeigt ~4000 Deskriptoren
Antwort1
Es gibt zwei Einstellungen, die die Anzahl der offenen Dateien begrenzen: eine Begrenzung pro Prozess und eine systemweite Begrenzung. Die systemweite Begrenzung wird durch fs.file-max
sysctl festgelegt, das in/etc/sysctl.conf
(beim Booten gelesen) oder im laufenden Betrieb mit demsysctl
oder durch Schreiben in /proc/sys/fs/file-max
. Das Limit pro Prozess wird durch festgelegt ulimit -n
.
Das Limit pro Prozess wird von jedem Prozess von seinem übergeordneten Prozess übernommen. Ein Standardwert kann in/etc/security/limits.conf
, aber dies gilt nur für interaktive Sitzungen, nicht für Daemons, die beim Booten gestartet werden. Es gilt nur für einen Daemon, wenn dieser über eine interaktive Sitzung gestartet wird.
Um die Prozesslimits für einen Daemon zu erhöhen (oder zu verringern), bearbeiten Sie im Allgemeinen sein Startskript und fügen Sie ulimit
kurz vor dem Start des Daemons einen Aufruf hinzu. Das Debian-Redis-Paket enthält eine Konfigurationseinstellung in einer separaten Datei: /etc/default/redis
. Kommentieren Sie die ULIMIT=
Zeile aus und erhöhen Sie den Wert bei Bedarf.