%20ist%20fehlgeschlagen%60%20nur%20beim%20Ausf%C3%BChren%20der%20Anwendung%20als%20WWW-Daten.png)
Ich betreibe einen Nginx-Proxyserver, der einer SignalR-Anwendung mit Tausenden von verbundenen WebSocket-Clients vorgelagert ist.
Um all diese Verbindungen unterzubringen, habe ich Folgendes festgelegt nginx.conf
:
worker_rlimit_nofile 60000;
events {
worker_connections 30000;
}
myname
Wenn ich meine Anwendung mit dem Benutzerkonto starte , funktioniert alles wie erwartet.
Wenn ich versuche, die Anwendung unter Verwendung einer systemd-Dienstdefinition mit dem Benutzer auszuführen www-data
, startet die Anwendung problemlos. Allerdings schlagen jetzt ungefähr 80 % der Anforderungen an den Server/die Anwendung mit folgender Fehlermeldung fehl (von nginx error.log
):
nginx recv() failed (104: Connection reset by peer) while reading response header from upstream
Dies führt zu 520 Statuscodes (Cloudflare) für die Clientanwendung.
Die anderen 20 % der Anfragen sind wie erwartet erfolgreich, sodass ich weiß, dass die Anwendung ordnungsgemäß ausgeführt wird.
[Unit]
Description=MyApp
[Service]
WorkingDirectory=/home/myname/app/
ExecStart=/usr/bin/dotnet /home/myname/app/publish/App.dll
Restart=always
RestartSec=10
SyslogIdentifier=MyApp
User=www-data
EnvironmentFile=/myapp.env
[Install]
WantedBy=multi-user.target
Ich habe das Gefühl, dass ich einen Grenzwert erreiche, der unter dem liegt, den ich mit angegeben habe worker_rlimit_nofile 60000
, und dass dies zu Fehlern führt (könnte aber auch nur ein Ablenkungsmanöver sein). Die Überprüfung ulimit
für beide dieser Benutzer zeigt, dass sie dasselbe haben:
# su - myname -c 'ulimit -aH' -s '/bin/bash'
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31823
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 1048576
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 31823
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
# su - www-data -c 'ulimit -aH' -s '/bin/bash'
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31823
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 1048576
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 31823
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Was könnten die Ursachen für diese Fehler beim Betrieb als sein www-data
?
Antwort1
Die Ressourcenlimits, die Sie für angemeldete Benutzer (z. B. in limits.conf
) konfiguriert haben, gelten nicht für von systemd gestartete Dienste. Diese Ressourcenlimits müssenin der Serviceeinheit selbst konfiguriertoder durch das Setzen systemweiter Standardwerte insystemd-system.conf.
Zum Beispiel:
[Service]
LimitNOFILE=1048576