bartv
(Bart )
6월 2, 2021, 9:13오전
1
안녕하세요!
오늘 재구축 이후 서버 오류가 많이 발생하고 있습니다. nginx 연결 문제인 것 같습니다. nginx/error.log에서 다음과 같은 768 worker_connections are not enough 메시지가 한꺼번에 쏟아지는 경우가 종종 보입니다:
2021/06/02 10:42:21 [alert] 1143#1143: *28468 1768 worker_connections are not enough while connecting to upstream, client: (IP removed), server: _, request: "POST /message-bus/8fc08436f86f47479cf0dad3deb5c4dc/poll?dlp=t HTTP/1.1", upstream: "http://127.0.0.1:3000/message-bus/8fc08436f86f47479cf0dad3deb5c4dc/poll?dlp=t", host: "blenderartists.org", referrer: "https://blenderartists.org/t/convert-multiple-objects-to-single-mesh-with-vertex-grouping/489173/2"
이 문제를 해결할 수 있는 방법이 있을까요? CPU/메모리 자원은 충분합니다 - ‘worker connections’ 수를 늘릴 수 있을까요?
bartv
(Bart )
6월 2, 2021, 10:43오전
2
업데이트를 해보았습니다. 당분간 워커 연결 수를 늘렸지만, 여전히 이러한 오류가 발생하고 있습니다(빈도는 줄었지만, 워커 수가 많을 때 더 자주 발생합니다). 최근 이 문제를 일으킬 만한 변경 사항이 있었는지, 아니면 어떻게 하면 더 잘 추적할 수 있을지 정말 궁금합니다.
## 빌드 후 실행할 사용자 지정 명령
run:
- exec: echo "Beginning of custom commands"
- replace:
filename: "/etc/nginx/letsencrypt.conf"
from: "worker_connections 768"
to: "worker_connections 1768"
DrewH
(Drew)
6월 2, 2021, 2:51오후
3
재빌드 이후에 이런 일이 발생했다는 점이 흥미롭네요. 최근 일괄 작업을 수행해 보셨나요? Sidekiq 로그를 확인해 보시고, 거기에도 대량의 작업이 있는지 살펴보는 것이 좋습니다.
bartv
(Bart )
6월 2, 2021, 3:25오후
4
최근에 썸네일 미리보기 TC로 전환하면서 일괄 작업을 몇 번 수행하긴 했지만, sidekiq 큐에는 아무것도 없으니 그쪽은 확실히 제외할 수 있습니다.
Falco
(Falco)
6월 2, 2021, 3:28오후
5
2일 전에 nginx 버전을 업데이트했으니, 상황을 주시해 두는 것이 좋겠습니다. 웹사이트에 동시 접속자가 500명 이상 있나요?
또한 사이트 전체가 Cloudflare 뒤에 위치해 있으므로, 이로 인해 상황이 다를 수 있습니다.
bartv
(Bart )
6월 2, 2021, 3:31오후
6
Falco:
사이트에 동시 접속자가 500명 이상인가요?
잘 모르겠습니다. 그럴 수도 있겠죠? 어떻게 확인할 수 있는지 아이디어가 있을까요?
맞습니다. 하지만 가속 기능을 비활성화했으며, 기본적으로 이미지와 아바타 캐싱에만 사용하고 있습니다. 오늘까지 문제없었는데..
Falco
(Falco)
6월 2, 2021, 3:48오후
7
하하, 보통 사람들은 Google Analytics나 유사한 도구를 사용하여 이러한 정보를 파악합니다. Discourse 대시보드에는 일일 페이지뷰와 사용자 방문 수가 포함되어 있어 이를 참고할 수도 있습니다.
bartv:
가속화를 모두 비활성화했습니다
사실이 아닙니다. 여러분의 사이트 전체가 Cloudflare를 통해 제공되고 있습니다:
curl -I https://blenderartists.org/
HTTP/2 200
cf-cache-status: DYNAMIC
cf-request-id: 0a6ef945b3000002fe272b2000000001
server: cloudflare
cf-ray: 6591c4b5ec5902fe-MIA
alt-svc: h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400, h3=":443"; ma=86400
그러나 여러분의 nginx가 다운스트림 연결이 아닌 업스트림 연결에 대해 경고하고 있으므로, 이는 완전히 무관할 수 있습니다. 이는 nginx와 unicorn 사이의 연결이 고갈되고 있음을 의미합니다.
메시지 버스(실시간 업데이트 서비스)로 인해 각 방문자를 위해 연결을 유지하기 때문에, 사이트가 어느 정도 인기가 있다면 이는 다소 예상되는 일입니다.
worker_processes와 worker_connections를 높이는 것은 안전하며, 여러분의 경우 합리적인 조치로 보입니다. 기본적으로 worker_processes는 CPU 코어 수로 설정되어 있습니다. CPU 코어가 몇 개인가요?
bartv
(Bart )
6월 2, 2021, 3:55오후
8
맞아요 우리는 오래전에 그걸 중단했거든요. 하루 페이지뷰가 약 25만 건(봇 포함)이므로 500건은 비정상적이지 않아 보입니다. 사용자 방문 수는 로그인한 방문만 추적하는 거죠?
맞아요 - 우리는 요청을 CF를 통해 전달해야 하지만, CF가 우리의 JavaScript 등을 건드리게 하지는 않습니다.
우리는 12코어, 64GB RAM을 보유하고 있습니다. 일반적인 부하(load)는 약 2이며, RAM의 50%를 사용 중입니다.
Falco
(Falco)
6월 2, 2021, 4:10오후
9
정말 이상하네요!
커넥션 수 공식은 worker_processes * worker_connections이며, 12 * 768이 되어야 하므로 (셈해 보면) 9216이 됩니다. 그런데 로그에는 1768이라고 나와 있네요…
app.yml 파일에 다음을 시도해 보세요:
## 빌드 후 실행할 사용자 지정 명령
run:
- exec: echo "Beginning of custom commands"
- replace:
filename: "/etc/nginx/nginx.conf"
from: "worker_connections 768"
to: "worker_connections 2000"
- replace:
filename: "/etc/nginx/nginx.conf"
from: "worker_processes auto"
to: "worker_processes 10"
2번 게시물에 있는 블록이 잘못된 파일에 적용되고 있다는 점에 유의하세요.
bartv
(Bart )
6월 2, 2021, 5:08오후
10
실수로 잘못된 코드를 붙여넣었습니다. 처음에는 letsencrypt 템플릿을 시도했지만, 결국 nginx.conf를 1768개의 워커 연결로 변경했습니다.
제시해 주신 값들을 시도해 보겠습니다. 결과를 알려드리기 위해 돌아올게요.
bartv
(Bart )
6월 2, 2021, 5:41오후
11
아직도 발생하고 있습니다:
2021/06/02 17:40:03 [alert] 2102#2102: *262491 2000 worker_connections are not enough while connecting to upstream, client: <ip removed>, server: _, request: "POST /message-bus/0e453fae0c604c29a876e6ede05b7341/poll?dlp=t HTTP/1.1", upstream: "http://127.0.0.1:3000/message-bus/0e453fae0c604c29a876e6ede05b7341/poll?dlp=t", host: "blenderartists.org", referrer: "https://blenderartists.org/t/weight-paint-not-painting/551282"
bartv
(Bart )
6월 3, 2021, 1:30오후
12
worker_connections를 4000으로 올렸는데, 지금까지는 잘 되고 있습니다
pfaffman
(Jay Pfaffman)
2월 18, 2022, 7:48오후
14
좋아요! 그러면 다음과 같이 하는 거죠?
params:
nginx_worker_connections: 4000
app.yml/web_only.yml 파일에요?
Falco
(Falco)
2월 18, 2022, 7:51오후
15
맞습니다. 같은 패치에서 기본값도 4k로 올렸기 때문에, 관리자분들은 더 이상 값을 올릴 필요가 없는지 신중하게 검토해 보시는 것이 좋습니다.
pfaffman
(Jay Pfaffman)
2월 18, 2022, 7:54오후
16
다른 사이트에서는 워커 프로세스 수를 CPU 코어의 2배로 설정하고 있었습니다. 이 부분도 제거해야 할까요?