로그에 DistributedMutex 오류 경고가 자주 나타남

이 문제는 리버스 프록시로 인해 직접적으로 발생한 것이 아닐 가능성이 높습니다.

API를 통해 생성된 게시글의 경우, Discourse는 중복된 API 게시글 생성을 방지하기 위해 PostsController#create 주위에 DistributedMemoizer를 사용합니다. 이 메모라이저는 유효 기간이 1초로 매우 짧은 Redis 기반 DistributedMutex를 사용합니다. 이 경고는 해당 잠금(lock) 내부에서 수행되는 게시글 생성/시리얼라이징 작업이 예상보다 오래 걸렸음을 의미합니다.

즉:

  • API 게시글이 여전히 성공적으로 생성된다면, 이는 근본적인 실패가 아니라 경고 수준입니다.
  • expected max: 1 secs, took an extra 1 secs는 잠금이 약 2초 동안 유지되었음을 의미합니다.
  • 이 문제는 nginx/1Panel 리버스 프록시 자체보다는 서버 성능, Redis/Postgres 지연 시간, 디스크 I/O, CPU/RAM 부하, 플러그인 또는 느린 후처리(post-processing)와 관련이 있을 가능성이 더 높습니다.
  • API 게시글 작성 시에만 나타나는 이유는 이 메모라이저 경로가 API 요청에 사용되기 때문입니다.

확인해 볼 가치가 있는 사항:

  1. API 요청이 성공하여 게시글이 하나만 생성되는가?
  2. 클라이언트 측에서 API 요청에 걸리는 시간은 얼마나 되는가?
  3. API 게시글 작성 중 CPU, 메모리, 스왑 또는 디스크 I/O가 포화 상태인가?
  4. Redis와 Postgres가 동일한 컨테이너/호스트 내에 있으며, 정상적으로 작동 중인가?
  5. 이미지/업로드 없이 아주 작은 일반 텍스트 게시글만 작성해도 경고가 여전히 발생하는가?
  6. 비표준 플러그인이 설치되어 있는가?

이것은 표준 Discourse Docker 설치 방식이 아닌 1Panel/컨테이너 배포 환경이므로, Discourse 코어 버그로 판단하기 전에 가능하면 공식 지원되는 설치 환경에서 재현해 보는 것도 도움이 될 수 있습니다.