Ruby의 메모리 한도를 설정하는 방법?

메모리 사용량을 조절할 수 있도록 사이트 설정 옵션으로 만들 수 있을까요? 현재 튜닝 값은 2G로 설정되어 있습니다(편집: 아, 제 실수입니다. 아래를 참조하세요). 이전에는 4G였습니다. 그런데 권장 하드웨어 구성은 1G + 스왑입니다. 제 생각에는 Ruby의 사용량이 실제로 2G까지 올라간다면 1G 노드가 페이지ング(페이지 스왑)으로 인해 상당히 불안정해질 수 있을 것 같습니다.

업그레이드 로그에서:

Migrating default
Seeding default
*** Bundling assets. This will take a while *** 
$ RUBY_GC_MALLOC_LIMIT_MAX=20971520 RUBY_GC_OLDMALLOC_LIMIT_MAX=20971520 RUBY_GC_HEAP_GROWTH_MAX_SLOTS=50000 RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=0.9  bundle exec rake assets:precompile
Purging temp files
Bundling assets
1개의 좋아요

현대 Ruby에서 이 설정들이 얼마나 관련이 있는지는 잘 모르겠지만, @sam이 가장 잘 알 거예요.

1개의 좋아요

음, 잠깐, 그건 2기가가 아니라 20메가입니다. 그래서 제가 생각했던 상황과는 전혀 다릅니다. (수정: 더 나쁘네요! 아래를 참고하세요)

1개의 좋아요

20G를 시도해 보세요. :wink: :slightly_smiling_face:

1개의 좋아요

Discourse의 메모리 사용량은 예측 가능하므로, 조정해야 할 항목은 Unicorn 워커의 수입니다.

1GB 서버의 경우 기본값으로 워커 2개를 설정하며, 이는 낮은 메모리 환경에서도 잘 작동할 수 있도록 구성되어 있습니다.

2개의 좋아요

실제로 포럼으로 실행되는 동안에는 그렇습니다. 하지만 이번에는 그렇지 않습니다!

업그레이드 중에 일부 작업은 Ruby를 위해 해당 환경 변수를 지정합니다.

1개의 좋아요

네, 업데이트 시에는 저사양 머신에서 메모리 부족으로 업그레이드가 실패하지 않도록 해당 변수들을 설정합니다.

2개의 좋아요

맞아요, 제 관찰로는 일부 경우에서 한도가 너무 높게 설정되어 있을 수 있어서, 이걸 설정 가능하게 만들 수 있을지 궁금합니다.

2개의 좋아요

수년간 이 절차를 여러 번 테스트해 보았고, 1GB VPS를 사용하는 소규모 커뮤니티에서도 문제없이 작동할 수 있음을 보장합니다. 업그레이드 시 메모리를 확보하기 위해 추가적인 Unicorn 워커를 종료하는 기능도 포함되어 있습니다.

이 커밋에서 파생된 코드를 확인해 보실 수 있습니다:

Digital Ocean 드롭렛에서 실패하는 것을 재현할 수 있다면 기꺼이 조사해 드리겠습니다.

그것이 필수적인 경우 플러그인을 포크하여 필요에 맞게 조정할 수 있습니다.

4개의 좋아요

감사합니다. 이제 상황이 조금은 파악됩니다. (두 가지 매우 중요한 점: 이 GC 설정은 업그레이드를 위해 특별히 조정된 것이며, 단위는 바이트이므로 현재 제한은 20MB로 설정되어 있습니다. 이전 스레드에는 유용하고 흥미로운 세부 사항이 포함되어 있습니다. [현재 제가 접근할 수 없어 아카이브 링크를 첨부했습니다].)

2개의 좋아요

@sam, 해당 주제를 삭제 해제할까요? 역사적 가치가 있는 건가요, 아니면 구식이 되었나요?

1개의 좋아요

분명히 오래된 내용입니다. 최신 Ruby에는 여러 가지 malloc 제한이 있습니다. 역사적 가치가 있는 흥미로운 주제이지만, 상단에 "오래됨"이라는 큰 표기를 붙여야 할 것입니다.

우리의 업그레이드는 이미 최대한 타이트하게 실행되고 있으며, 이 위에 추가로 할 수 있는 최선은 가용성을 낮추는 것입니다. 메모리가 극도로 제한된 경우, 업그레이드 시 장애를 감수해야 합니다.

5개의 좋아요