답변 주신 모든 분들께 감사드립니다 - 어디서 읽었는지는 기억이 나지 않지만, 항상 코어당 워커를 2개씩 설정해야 한다고 생각했습니다. 이제 포럼별로 워커 수를 줄이고, 가장 바쁜 포럼에는 더 많이, 덜 바쁜 포럼에는 적게 배정했습니다. 앞으로 일주일 동안 상황을 모니터링한 후, 도움이 되지 않았다면 다시 보고하겠습니다.
저도 마지막 업그레이드 이후로 동일한 현상을 겪고 있습니다. 업그레이드는 원포스터(OP)가 글을 올린 지 하루 뒤에 진행했으므로, 이는 유니콘(unicorn) 워커 수와 무관할 것으로 생각합니다. unicorn.conf.r* 프로세스가 의심스러운데, 해당 용어에 대한 검색 결과 중 이 주제의 원포스트가 전 세계적으로 유일한 결과이기 때문입니다. 정상적으로는 unicorn.conf.rb가 더 일반적이어야 합니다.
최신 Discourse로 업그레이드한 후 더 이상 unicorn.conf.r*를 볼 수 없습니다. (이제 CPU 사용량이 80% 수준에 도달하는 프로세스는 모두 ruby로 표시되며, 발생 빈도는 이전보다 낮아 보입니다.) 로드 평균은 이전과 비슷하지만, 워커 수를 조정했을 때보다는 낮습니다.
최신 버전으로 업그레이드하셨나요? 어떤 하드웨어를 사용 중이며, 포럼의 트래픽은 얼마나 활발한가요?
네, 3.4.0.beta4-dev 버전입니다. 이 버전으로 업데이트한 후 CPU 사용률이 높아지기 시작했습니다. 다른 변경 사항은 없습니다.
RAM 8GB, vCPU 2개, 여유 공간이 충분한 160GB SSD를 사용하고 있습니다.
위에서 제 프로덕션 사이트의 CPU 사용률을 게시했습니다. 이 사이트는 동시에 약 30명의 사용자가 접속합니다. 하지만 같은 문제가 발생하는 테스트 사이트도 있으며, 그곳에는 트래픽이 전혀 없고 플러그인도 설치되어 있지 않습니다. 업데이트 전후의 CPU 사용률 (피크는 일일 백업으로 인한 것입니다):
마크, 우리의 상황이 관련이 있는지 확신하지 못합니다. 제 경우 스티븐이 말한 부분이 큰 역할을 한 것 같습니다:
최근 두 개의 다른 인스턴스를 동일한 서버로 옮겼는데, 이전에 코어가 더 많았던 서버를 사용했을 때 unicorn 워커가 8로 설정되어 있었다는 사실을 실제로 잊고 있었습니다(하지만 그 서버는 자체적인 문제가 있어 전체적으로 더 나은 성능을 발휘하는 코어가 적은 Xeon으로 다시 이전했습니다).
결국 이 서버에서 unicorn 워커를 줄이면 부하가 감소하지만 타임아웃이 발생하기 시작했고, 워커를 늘리면 타임아웃은 사라지지만 부하가 높아졌습니다 - 그래도 여전히 허용 가능한 범위 내였습니다. 워커를 더 늘려도 증가한 부하를 처리할 수 있다고 생각하지만, 현재 설정은 당분간 좋은 상태입니다.
그럼에도 불구하고, 인스턴스를 동일한 서버로 옮긴 후 예상했던 범위 내에서 실행되었습니다(부하가 증가했지만 상당한 수준은 아니었으며) 업데이트 후 부하가 높아진 느낌이 들었습니다… 하지만 이를 확신할 수는 없으며, Discourse가 기능을 추가하면서 때때로 더 강력한 하드웨어가 필요하거나 때로는 ‘느리게’ 느껴질 수 있다는 점을 염두에 두어야 합니다(구버전의 Discourse 인스턴스를 사용했을 때 훨씬 더 반응이 빠르다는 느낌을 받았지만 - 물론 새 버전의 모든 기능을 갖추고 있지는 않았습니다).
또한, 최신 Discourse 업데이트(PG 15) 이후 부하가 실제로 약간 감소한 것 같습니다.
마크에게 무엇을 제안해야 할지 모르겠습니다 - 워커와 다른 설정들도 조정해 보는 건 어떨까요? 예를 들어 db_shared_buffers나 db_work_mem 같은 것들요. "업데이트 후 CPU 사용량 높음 - 제 인스턴스가 성능 튜닝이 필요한가요?"와 같은 제목으로 전용 스레드를 시작해 보는 것도 좋을 것 같습니다. 또는 그런 식으로요
최근 같은 서버에 있는 다른 두 포럼을 이전한 뒤로 서버 상태를 계속 주시하고 있었기 때문에, 그렇지 않았다면 이 문제를 발견하지 못했을 수도 있습니다. 이런 문제가 실제로 얼마나 많은 사용자에게 영향을 미쳤는지, 그리고 그중 몇 명이나 이를 인지하지 못하고 있는지 궁금합니다.
Discourse 팀은 이러한 문제를 감지하고 알리는 조치를 마련해 두었나요? 예를 들어, 관리자(Admin)가 특정 주제에 대해 설정할 수 있는 자원봉사 프로그램 같은 것 말입니다. “업그레이드 전/후 XX시간/일/주 동안 서버 부하를 Discourse로 전송” 같은 방식으로요. 아니면, 더 좋다면 서버 부하를 로컬에서 추적한 뒤 업그레이드 후 부하가 증가하는 것을 감지하면 관리자에게 알림을 보내는 방식도 좋습니다. 필요하면 여기서 공유할 수도 있겠죠.
아마 그 영향은 눈치채지 못했을 겁니다. 하지만 약 2주 전에 Discourse로 마이그레이션을 완료했기 때문에 서버를 세밀하게 모니터링하고 있습니다. 마이그레이션 이후 다양한 검증 작업(백업 실행 등)을 수행 중입니다. 몇 달이 지나면 그 영향은 절대 알아차리지 못했을 것입니다.
Discourse 측에서 매일 부하 테스트를 수행하고 있기를 바랍니다. 과거 제 경험상, 커밋된 코드로 매일 서버를 재빌드하는 시스템이 있었습니다. 이 시스템은 하루 종일 시뮬레이션된 사용자가 서버를 사용하도록 설계되어 있었습니다. 사용자 관점과 서버 관점 모두에서 주요 성능 지표를 측정했습니다. 이를 통해 메모리 누수, 비효율적인 코드, UX의 예상치 못한 변경 사항을 능동적으로 포착할 수 있었습니다.
아직도 Sam과 팀에 감사의 뜻을 전하고 싶습니다. phpBB의 세계에서 이런 문제가 해결되고 개선되려면 수십 년이 걸렸을 텐데, 빠른 대응은 정말 훌륭했습니다. (시드니 시간과 비교했을 때, 중부 시간(Central Time)으로 새벽 2시까지 깨어 있어야 했다는 점을 감안하더라도요.)