기존 포럼을 대체할 플랫폼으로 Discourse를 테스트해 보고 있는데, 요구 사항을 파악하려고 합니다.
현재 Digitalocean 노드에서 4vCPU와 8GB RAM을 갖춘 Discourse 드롭렛을 실행 중입니다.
트래픽이나 활동이 전혀 없는 상태에서 vBulletin 사이트를 가져와서 실행하고 있는데, 시스템이 처음에는 8GB RAM의 약 75%를 사용하다가 며칠이 지나면 100%까지 올라가면서 완전히 응답을 멈춥니다.
최소 요구 사양이 이보다 훨씬 낮은 것 같아서 이해가 가지 않습니다.
(컨테이너를 재구성했고, Sidekiq 작업을 확인하고 정리해 보았지만 여전히 사용량이 높습니다)
포럼을 정상적으로 유지하려면 대용량 RAM 구성이 필요한 건지, 아니면 다른 해결책이 있는지 조언을 구합니다.
pfaffman
(Jay Pfaffman)
5월 31, 2022, 5:12오후
2
몇 개의 게시글이 가져와졌나요?
시스템이 게시글을 다시 생성하고 이미지를 리사이즈하는 중일 수 있으며, 사용자가 없더라도 많은 리소스를 사용할 수 있습니다. 대기 중이거나 실행 중인 작업이 있는지 확인하려면 /sidekiq를 살펴보세요. 또한 htop을 사용하면 현재 실행 중인 작업에 대한 힌트를 얻을 수 있습니다.
게시글 수가 약 240,000개입니다.
수입(Import)은 약 5주 전에 진행했으며, 이후 컨테이너가 100% 메모리 사용률로 인해 응답이 멈추는 문제를 해결하기 위해 앱 재구축을 5번 수행했습니다.
언급한 대로 Sidekiq의 모든 작업을 삭제했는데도 여전히 사용률이 75%를 유지하고 있습니다.
어제 서버를 재구축한 이후의 메모리 그래프입니다:
*RAM: 8GB
CPU
트래픽
Sidekiq
제 생각에는 이 시스템이 며칠 안에 메모리 누출로 인해 완전히 멈출 것 같습니다. (지금까지 관찰된 행동이 그랬습니다.)
RGJ
(Richard - Communiteq)
6월 1, 2022, 11:19오전
5
가져오기 후에는 데이터베이스 성능을 위해 백업을 생성한 후 동일한 인스턴스에 복원하는 것이 항상 좋은 방법입니다.
메모리 그래프에는 캐시가 포함되었나요? (즉, free -m의 출력은 어떻게 되나요?)
플러그인은 사용 중인가요?
## 플러그인은 여기에 설치됩니다
## 자세한 내용은 https://meta.discourse.org/t/19157 참조
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-data-explorer.git
- git clone https://github.com/discourse/discourse-solved.git
- git clone https://github.com/discourse/discourse-cakeday.git
- git clone https://github.com/discourse/discourse-spoiler-alert.git
- git clone https://github.com/discourse/discourse-user-card-badges.git
- git clone https://github.com/discourse/discourse-adplugin.git
좋은 아이디어네요. 제가 시도해볼 만한 방법입니다.
그래서 사이트가 응답하지 않게 되었습니다.. (백업 후 백업을 복원하고 재시작했습니다)
RAM 사용량이 6GB에서 7GB로 증가했고 사이트가 응답하지 않습니다.
Falco
(Falco)
6월 1, 2022, 4:24오후
9
Redis가 거의 5GB를 사용하고 있어 Discourse가 사용할 수 있는 자원이 매우 적습니다. 특히 실행 중인 unicorn 프로세스 수를 고려하면 더욱 그렇습니다.
sidekiq 큐가 깨끗하다면, 가져오기 과정에서 너무 많은 불필요한 데이터가 쌓였을 수 있으므로 Redis를 정리해 보세요:
./launcher enter app
redis-cli flushall
알겠습니다. redis 명령어를 시도해 보겠습니다.
unicorn 워커 문제는 꽤 초기 단계에서 확인했던 사항입니다. db_shared_buffers의 RAM 사용량과 함께 unicorn 워커를 3으로 설정했습니다.
하지만 unicorn 워커 설정은 실제로 실행되는 워커 수에 거의 영향을 미치지 않는 것 같습니다.
제 app.yml 파일에서
## How many concurrent web requests are supported? Depends on memory and CPU cores.
## will be set automatically by bootstrap based on detected CPUs, or you can override
UNICORN_WORKERS: 3
Falco:
redis-cli flushall
flushall 명령이 정말 큰 효과가 있었네요. 사용량이 2GB까지 줄었습니다. 이제 이 수준을 유지할 수 있을지 지켜봐야겠습니다.
걱정스러웠던 부분은 이전에는 데이터가 계속 증가했다는 점이었습니다. 이제 앱이 스스로 더 잘 관리될 수 있기를 바랍니다.
그럼에도, import가 데이터를 Redis에 영구적으로 유지하는 건가요? 좀 이상하게 느껴지는데, Redis가 어떻게 동작하는지 정확히 모르거든요.
도와주셔서 정말 감사합니다.