연속으로 게시물을 올리면 모든 이메일이 전송되지 않습니다

이 포럼은 모든 게시글에 대한 승인을 요구합니다. 그 결과 일부 게시글이 짧은 시간 간격으로 연속 게시됩니다: 관리자가 로그인하면 게시글을 빠르게 연속으로 승인하기 때문입니다.

대부분의 카테고리는 모든 사용자에게 "관심 있음"으로 설정되어 있으며, 로그인하는 사용자는 거의 없습니다. 포럼은 이메일 알림에 크게 의존하고 있습니다.

문제는 게시글이 짧은 시간 간격(1.5분 이내)으로 게시될 때 모든 이메일이 전송되지 않는다는 것입니다. 이 쿼리는 전송된 모든 이메일의 수(토픽별 email_logs 항목)를 보여줍니다. 이메일을 받아야 할 사용자의 수는 약 2,250명입니다. 최근 로그인한 사용자(약 1%)는 이메일을 받지 않으므로 숫자가 약간 변동되지만, 2,200에서 2,250 사이여야 합니다.

첫 세 줄에서 볼 수 있듯이, 빠르게 연속으로 게시된 게시글에는 전체 수만큼의 이메일이 전송되지 않았습니다.

여기서 무슨 일이 일어나고 있을까요?

아, max_emails_per_day_per_user가 매우 높은 값으로 설정되어 있습니다.


열: 토픽, 날짜/시간, 카테고리, 전송된 이메일 수

지난 몇 달간 몇 가지 새로운 통찰을 얻었습니다:

  • 문제는 실제 이메일이 아니라, 그 기반이 되는 알림 생성 과정에 있었습니다.
  • 짧은 시간 내에 대량의 알림을 생성하면 Sidekiq is consuming too much memory(Sidekiq이 너무 많은 메모리를 사용 중입니다)라는 오류로 인해 Sidekiq이 재시작됩니다.
  • Sidekiq이 재시작되면 특정 게시물에 대해 생성 중이던 알림 배치(batch)가 중단되어, 알림 세트가 불완전하게 남게 됩니다.

수정: UNICORN_SIDEKIQ_MAX_RSS 값을 높인 이후 지난 9일 동안 이 문제가 다시 발생하지 않았습니다.