CPU 사용률은 다시 약 15~20%로 내려왔는데, 이는 평소 수준입니다. 작업 처리 속도도 여전히 느린 상태입니다.
확인 차원에서 말씀드리자면, 저는 일부 Sidekiq 프로세스를 낮은 우선순위 큐를 전담하도록 할당(assign)하자는 의미였지, 단순히 추가(add)하자는 뜻은 아니었습니다. 낮은 우선순위 작업은 훨씬 빠른 속도로 처리될 수 있고, 동일한 병목 현상을 겪지 않을 것으로 보였기 때문입니다. 초당 처리 작업 수가 이렇게 극단적으로 달라지는 이유(즉, 기본 큐의 대기열에 막힌 낮은 우선순위의 ‘쉬운’ 작업들)를 설명할 수 있을 것이라 추측했습니다.
정리하자면, 작업 완료 속도가 느린 것이 PostgreSQL 성능 때문이라고 보시는지, 아니면 어제 관찰했던 높은 CPU 사용률 이벤트(현재는 정상으로 돌아왔습니다) 때문이라고 보시는지 궁금합니다.
업데이트: 저우선순위 큐와 기본 큐를 몇 번 삭제해 보았지만, 기본 큐가 즉시 다시 채워지기 때문에 속도에 아무런 영향이 없었습니다. 그 다음 기본 큐를 삭제하고 읽기 전용 모드를 활성화해 보았습니다. 이 방법으로 초당 작업 처리량이 급격히 증가하여 저우선순위 큐를 매우 빠르게 처리했습니다(초당 약 100배의 속도).
입력해 주셔서 감사합니다 @pfaffman app.yml의 db_shared_buffers와 db_work_mem가 PostgreSQL의 RAM 접근을 제어하는 유일한 옵션이 맞나요?
위쪽으로도 아래쪽으로도 조금씩 조정해 봤습니다. 현재 app.yml의 설정은 다음과 같습니다:
db_shared_buffers: “32768MB”
db_work_mem: “128MB”
시스템 총 RAM은 128GB입니다.
또한 /var/discourse/shared/standalone/postgres_data/postgresql.conf에서 max_connections를 변경한 후 Discourse를 다시 빌드해 보기도 했습니다. 기본값(100)보다 높은 값인 200에서 500까지 시도해 보았으며, 현재는 300으로 설정되어 있습니다. 다만 해당 파일에서 수정한 것이 실제로 최대 연결 수 값을 변경하는 것인지 확실하지 않습니다.
/var/discourse/templates/postgres.template.yml 파일에서 다음 내용을 확인했습니다.
@bartv 님, 조언해 주신 대로 Discourse 앱 안에서 top을 통해 모니터링하고 있습니다. postgres 사용자가 실행하는 postmaster 프로세스가 상당히 많이 표시되고 있으며, CPU 사용량은 변동이 있습니다. 아래 스크린샷들은 비슷한 사용량 통계가 장기간 지속되는 상황을 나타냅니다.
VACUUM ANALYZE;를 실행해 보았지만, 안타깝게도 효과가 없었습니다. 참고용으로 아래에 사용된 명령어를 나열합니다:
cd /var/discourse/
./launcher enter app
sudo -u postgres psql
\c discourse
VACUUM ANALYZE;
pg_stat_statements를 활성화하려고 시도했으며, 아래 단계들을 수행했습니다:
/var/discourse/shared/standalone/postgres_data/postgresql.conf 파일에 아래 줄들을 추가/수정했습니다:
shared_preload_libraries = ‘pg_stat_statements’ # (변경 시 재시작 필요)
pg_stat_statements.max = 10000
pg_stat_statements.track = all
pg_stat_statements.track_utility = on
pg_stat_statements.save = off
ERROR: pg_stat_statements must be loaded via shared_preload_libraries
제 추측으로는 postgresql.conf 파일(/var/discourse/shared/standalone/postgres_data/postgresql.conf)에 대한 제 수정 사항이 제대로 적용되지 않고 있는 것 같습니다 (편집 후 Discourse를 다시 빌드했습니다). app.yml 파일을 통해 이러한 설정을 수정할 수 있을까요? 아니면 제가 잘못한 부분이 있는지 확인해 주실 수 있을까요?