%20fall%C3%B3%60%20solo%20cuando%20se%20ejecuta%20la%20aplicaci%C3%B3n%20como%20www-data.png)
Estoy ejecutando un servidor proxy nginx que enfrenta una aplicación SignalR con miles de clientes WebSocket conectados.
Para dar cabida a todas estas conexiones, he configurado lo siguiente en nginx.conf
:
worker_rlimit_nofile 60000;
events {
worker_connections 30000;
}
Si ejecuto mi aplicación usando la myname
cuenta de usuario, todo funciona como se esperaba.
Cuando intento ejecutar la aplicación usando una definición de servicio systemd con usuario www-data
, la aplicación se inicia bien, sin embargo, alrededor del 80% de las solicitudes al servidor/aplicación ahora fallan (desde nginx error.log
):
nginx recv() failed (104: Connection reset by peer) while reading response header from upstream
Lo que da como resultado 520 códigos de estado (cloudflare) para la aplicación cliente.
El otro 20 % de las solicitudes se realiza correctamente como se esperaba, por lo que sé que la aplicación se está ejecutando correctamente.
[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
Siento que estoy alcanzando un límite que está por debajo de lo que he especificado worker_rlimit_nofile 60000
y está provocando fallas (aunque podría ser solo una pista falsa). La verificación ulimit
de ambos usuarios muestra que tienen lo mismo:
# 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
¿Qué podría estar causando estas fallas al operar como www-data
?
Respuesta1
Los límites de recursos que haya configurado para los usuarios que han iniciado sesión (por ejemplo, en limits.conf
) no se aplican a los servicios iniciados por systemd. Estos límites de recursos deben serconfigurado en la propia unidad de servicioo estableciendo valores predeterminados para todo el sistema ensystemd-system.conf.
Por ejemplo:
[Service]
LimitNOFILE=1048576