520 www-data로 애플리케이션을 실행할 때만 `recv() 실패`

520 www-data로 애플리케이션을 실행할 때만 `recv() 실패`

저는 수천 개의 연결된 WebSocket 클라이언트가 있는 SignalR 애플리케이션 앞에 있는 nginx 프록시 서버를 실행하고 있습니다.

이러한 모든 연결을 수용하기 위해 다음을 설정했습니다 nginx.conf.

worker_rlimit_nofile 60000;
events {
        worker_connections 30000;
}

사용자 계정을 사용하여 애플리케이션을 실행하면 myname모든 것이 예상대로 작동합니다.

user 와 함께 systemd 서비스 정의를 사용하여 애플리케이션을 실행하려고 하면 www-data애플리케이션이 정상적으로 시작되지만 서버/애플리케이션에 대한 요청의 약 80%가 이제 (nginx에서 error.log) 실패합니다.

nginx recv() failed (104: Connection reset by peer) while reading response header from upstream

클라이언트 애플리케이션에 520 상태 코드(cloudflare)가 생성됩니다.

나머지 20%의 요청은 예상대로 성공하므로 애플리케이션이 제대로 실행되고 있음을 알 수 있습니다.

[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

로 지정한 것보다 낮은 제한에 도달하고 worker_rlimit_nofile 60000이로 인해 오류가 발생하는 것 같습니다(단순한 경고일 수도 있음). 이 두 사용자를 모두 확인하면 ulimit동일한 사용자임을 알 수 있습니다.

# 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

로 작동할 때 이러한 오류를 일으키는 원인은 무엇입니까 www-data?

답변1

로그인한 사용자(예: in)에 대해 구성한 리소스 제한은 limits.confsystemd가 시작한 서비스에는 적용되지 않습니다. 이러한 리소스 제한은 다음과 같아야 합니다.서비스 단위 자체에 구성됨또는 시스템 전체 기본값을 설정하여systemd-system.conf.

예를 들어:

[Service]
LimitNOFILE=1048576

관련 정보