최신 버전의 Discourse로 업데이트한 후, nginx에서 게시 시 502 오류가 발생하는 이상한 문제가 생겼습니다.
일부 사용자는 게시할 때 502 오류가 발생하지만, 일부는 그렇지 않습니다. 일부 프로필에서는 502 오류가 발생하지만, 일부에서는 발생하지 않습니다.
CPU 사용률은 약 10~25%, RAM 사용률도 약 20% 수준입니다.
플러그인 5개를 비활성화해 보았지만, 결과는 동일했습니다.
이 502 오류를 유발하는 원인을 파악하기 위해 어떤 로그를 확인해야 할까요?
I /var/log/nginx/error.log를 살펴보니, 무작위로 이러한 오류가 많이 발생하고 있으며, 이것이 502 오류를 유발한다고 추정됩니다.
시간 초과(timing out) 때문인가요?
2025/04/29 18:11:50 [error] 617#617: *419 upstream prematurely closed connection while reading response header from upstream, client: <IP>, server: _, request: "POST /posts HTTP/2.0", upstream: "http://127.0.0.1:3000/posts", host: "forum.domain.com", referrer: "https://forum.domain.com/"
정말 오래된 버전, 예를 들어 1년 이상 지난 버전입니다. 어떤 버전에서 업그레이드했는지 확인할 수 있는 로그가 어딘가에 있나요?
또한 이런 오류도 몇 개 나오고 있어요.
*2 connect() failed (111: Connection refused) while connecting to upstream,
...
upstream: "http://127.0.0.1:3000/message-bus/92fd28cbf742...
무작위로 발생하는 것 같아요. 갑자기 모든 게 빨라져서 다시 게시글을 올릴 수 있다가, 다시 느려지고 502 오류가 다시 뜨기 시작하거든요.
postgres/current 로그 내부 확인
2025-04-29 18:48:24.709 UTC [1746] discourse@discourse LOG: duration: 606789.911 ms execute <unnamed>: SELECT COUNT(*) FROM "posts" WHERE "posts"."deleted_at" IS NULL
duration: 606789.911 ms
게시물이 많고 사용자는 적은데, 이 쿼리에 왜 600k ms나 걸리는 걸까요?
인덱싱 같은 문제로 인해 쿼리가 느려지는 것일 수도 있나요?
postgres에서 discourse 테이블을 선택하고 REINDEX DATABASE discourse;를 실행하여 성능이 향상되기를 바랐습니다.
이 작업이 매우 오래 걸릴 것 같습니다.
pfaffman
(Jay Pfaffman)
4월 29, 2025, 7:39오후
10
PostgreSQL 15 업데이트 게시물에 있는 조언을 따르셨나요? 데이터베이스를 vacuum하는 것도 좋습니다.
저는 그렇게 하지 않았고, postgres_data_old 폴더는 가지고 있습니다(다만 해당 게시물에서 언급된 것과 다른 디렉토리에 있습니다).
하지만 그 게시물은 이렇게 말하고 있습니다.
“전용 데이터 컨테이너를 사용하는 환경이라면”, 여기서 postgre가 전용 Docker 컨테이너에서 실행되고 있다는 의미라고 가정했습니다.
저희는 포럼과 동일한 인스턴스에서 실행되고 있습니다. 그래서 이후 어떻게 진행해야 할지 모르겠고, "아니면"에 해당하는 조건절이 있는 것 같지도 않습니다.
폴더의 존재는 변환이 정상적으로 완료되었음을 의미하는 건가요?
pfaffman
(Jay Pfaffman)
4월 29, 2025, 7:56오후
12
postgres 버전은 /var/discourse/shared/standalone/postgres_data/PG_VERSION에서 확인할 수 있습니다. 커맨드 라인으로 업그레이드를 수행했다면, 업그레이드가 이미 이루어졌을 가능성이 있으며 이를 인지하지 못했을 수 있습니다(이 경우 rebuild를 두 번 실행했어야 합니다). 웹 인터페이스를 통해 업그레이드했다면, 운영체제와 Docker가 최신 버전이라면 커맨드 라인에서 rebuild를 수행하는 것이 좋습니다.
버전은 15입니다.
vacuum 명령을 실행한 후 상황이 훨씬 나아진 것 같습니다.
게시글 작성은 정상적으로 작동하고 빠른 것 같지만, 관리자가 사용자 프로필을 클릭해 진입할 때는 여전히 502 오류가 발생하며, 시간 초과인 것 같습니다.
데이터베이스의 해당 부분을 더 빠르게 만들 수 있는 방법이 있을까요?