520 `recv() ist fehlgeschlagen` nur beim Ausführen der Anwendung als WWW-Daten

520 `recv() ist fehlgeschlagen` nur beim Ausführen der Anwendung als WWW-Daten

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;
}

mynameWenn 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 ulimitfü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

verwandte Informationen