%20%EC%8B%A4%ED%8C%A8%60.png)
저는 수천 개의 연결된 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.conf
systemd가 시작한 서비스에는 적용되지 않습니다. 이러한 리소스 제한은 다음과 같아야 합니다.서비스 단위 자체에 구성됨또는 시스템 전체 기본값을 설정하여systemd-system.conf.
예를 들어:
[Service]
LimitNOFILE=1048576