pelcami
(Happy Lee)
10월 20, 2020, 6:56오후
1
메모리 할당 설정에 대한 설명을 제공해 주실 분 계신가요?
간헐적으로 커널의 “out of memory”/덤프 메시지가 발생하고, 스왑 사용량이 3배로 증가했으며, 애플리케이션 응답 속도가 점점 더 저하되고 있어, 우리의 앱이 때때로 메모리를 모두 사용하는 것처럼 보입니다. 현재 시스템은 8GB의 메모리와 2GB의 스왑을 갖추고 있습니다. 세부 사항은 아래에 있습니다.
("Cannot allocate memory" when upgrading )에서 물리적 메모리와 스왑을 추가하는 방법에 대한 설명을 확인해 보았지만, 이를 어떻게 할당하는지에 대한 자세한 내용을 찾지 못했습니다.
메모리 설정의 경우, 우리는 기본적으로 모든 기본값을 사용하고 있습니다. 시스템은 몇 분 후에 복구되지만, 사용량은 증가하고 있습니다. 성능을 개선하는 방법에 대해 알아볼 때가 된 것 같습니다. 다만, 이를 어디서 어떻게 설정해야 하는지 확신이 서지 않습니다. Docker 인스턴스에 할당된 메모리를 늘려야 하는지, 아니면 Ruby 유니콘(프로세스) 수를 늘려야 하는지(또는 둘 다?) 고민 중입니다.
저는 Ruby 경험은 없고 Docker 경험도 제한적인 시스템 관리자입니다 - 따라서 설정 파일의 위치와 사용할 문법을 알려주시면 큰 도움이 될 것입니다.
Discourse 2.6.0 beta2
Ruby 2.3.1-2~ubuntu16.04.14
Ubuntu 16.04
Falco
(Falco)
10월 20, 2020, 7:29오후
2
몇 마리의 유니콘을 실행 중인가요? 이 설정은 /var/discourse/containers/app.yml 파일에 있습니다.
pelcami
(Happy Lee)
10월 20, 2020, 8:16오후
3
라파엘, 안녕하세요 - app.yml의 “env” 섹션에서 4를 사용하도록 구성되어 있는 것을 확인했습니다.
pfaffman
(Jay Pfaffman)
10월 20, 2020, 8:21오후
4
RAM을 늘린 후 discourse-setup을 다시 실행하셨나요? 메모리 설정이 그에 맞게 조정됩니다. app.yml의 주석을 읽고 설정을 직접 조정할 수도 있습니다.
Falco
(Falco)
10월 20, 2020, 8:24오후
5
유니콘(유니코) 4개만 사용하는데 OoM(메모리 부족)이 발생하는 것은 정말 이상합니다. 이 정도면 약 2GB를 사용해야 하므로 PG와 Redis를 위해 6GB가 남을 것입니다.
OoM 이벤트가 발생할 때 어떤 프로세스가 메모리를 모두 소비하고 있는지 조사해야 합니다. 이는 정상적인 상황이 아닙니다.
Serge
(Happy Serge)
10월 20, 2020, 10:07오후
6
라파엘 팀 여러분 안녕하세요. 저는 세르게이고, 얼마 전 오랫동안 기다려온 휴가를 떠난 해피 리 씨와 함께 일하고 있습니다. 앞으로 이 이슈를 제가 담당하겠습니다.
설명에 추가할 내용: 해당 서버는 원래 8GB의 RAM과 2GB의 스왑으로 구축되었습니다. 이후로 업그레이드를 하지 않았습니다.
시스템 로그를 확인해 보니, 루비(Ruby)가 메모리를 모두 소모하여 커널 OoM(Out of Memory)을 유발하는 프로세스임을 알 수 있습니다.
Killed process 2960 (ruby) total-vm:10031472kB, anon-rss:7438148kB , file-rss:0kB
저는 루비 전문가가 아니어서, 루비 내에서 어떤 프로세스가 이렇게 많은 메모리를 소비하는지 어떻게 확인해야 할지 모르겠습니다.
제안이 있으시면 감사하겠습니다.
감사합니다.
-세르게이
Falco
(Falco)
10월 20, 2020, 10:09오후
7
이 Discourse 설치 환경에서 플러그인을 사용 중이신가요?
Serge
(Happy Serge)
10월 20, 2020, 10:27오후
8
저희는 Scheduled Digest 커스텀 플러그인을 사용 중이지만, 다른 두 설치 환경에서도 동일하게 실행되고 있으며 해당 환경에서는 문제가 발생하지 않습니다.
Falco
(Falco)
10월 20, 2020, 10:46오후
9
Serge:
정기 요약 커스텀 플러그인
해당 플러그인의 소스 코드 저장소를 여기에 링크해 주실 수 있나요?
Serge
(Happy Serge)
10월 21, 2020, 5:56오후
10
라파엘님,
해당 플러그인은 저희 조직이 개발비를 지불하여 개발한 것이므로, 여기서 소스 코드를 공개할 수 없습니다. 또한 해당 플러그인은 다른 인스턴스에서는 문제가 없이 정상적으로 작동하고 있어, 이 특정 인스턴스의 서버 메모리 자원을 늘리는 쪽으로 생각하고 있습니다. 해당 머신은 VM이므로 메모리 용량을 쉽게 두 배로 늘려 문제를 해결할 수 있는지 확인해 보겠습니다.
Falco
(Falco)
10월 21, 2020, 6:22오후
11
네, 화이팅하세요!
우리가 코드를 볼 수 없으니 디버깅을 도와드리기 어렵습니다. 인스턴스의 메트릭을 추적하려면 Prometheus exporter plugin for Discourse 를 설정해 보시는 것을 권장합니다.
Benjamin_D
(Benjamin Decotte)
10월 21, 2020, 6:31오후
12
다른 인스턴스들도 Ruby 2.3.1-2~ubuntu16.04.14를 실행하고 있나요?
아마도 관련이 없는 내용일 수 있지만:
이것은 분명히 Ruby의 버그였습니다. 여러 Ruby 버전에서 테스트한 결과, Ruby 2.3.x와 2.4.x에서만 메모리 누수가 발생했으며 (이 문제는 Ruby 2.5.0에서 수정된 것으로 보입니다).
그리고 Discourse의 readme에는 [Ruby 2.6+]가 요구됩니다
Serge
(Happy Serge)
10월 21, 2020, 9:26오후
13
감사합니다! 상황이 진정되면 업데이트를 올릴게요.
Serge
(Happy Serge)
10월 21, 2020, 9:28오후
14
벤jamin 씨, 다른 인스턴스들도 Ruby 2.3.1-2~ubuntu16.04.14를 실행하고 있습니다. Docker 설정이 깨지지 않는지 확인하기 위해 업데이트를 테스트해 보겠습니다.
sam
(Sam Saffron)
10월 21, 2020, 10:02오후
15
여기서는 Ruby 버전이 중요하지 않습니다
공식 docker 이미지를 사용하시는 한, 지원되는 올바른 discourse 버전을 사용하게 됩니다