Можно ли сделать параметр конфигурации сайта, определяющий, сколько памяти может использоваться? В настоящее время настройка установлена на 2 ГБ (Редактирование: ой, я ошибся, см. ниже), а ранее было 4 ГБ, хотя рекомендуемая конфигурация оборудования — 1 ГБ + файл подкачки. Мне кажется, что узел с 1 ГБ памяти может оказаться в состоянии интенсивной подкачки, если использование памяти Ruby действительно достигнет 2 ГБ.
Из журнала обновления:
Миграция по умолчанию
Инициализация по умолчанию
*** Сборка активов. Это займет некоторое время ***
$ 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
Очистка временных файлов
Сборка активов
У Discourse предсказуемое потребление памяти, поэтому нужным параметром для вас будет количество рабочих процессов Unicorn.
Если у вас сервер с 1 ГБ памяти, по умолчанию будет установлено 2 рабочих процесса, что должно работать нормально при таком ограниченном объеме памяти.
Да, во время обновлений мы устанавливаем эти переменные, чтобы обновление не завершалось сбоем из-за нехватки памяти на машинах с очень низкой производительностью.
Правильно, и я заметил, что лимиты для некоторых случаев могут быть установлены слишком высоко, поэтому мне интересно, можно ли сделать их настраиваемыми.
Мы многократно тестировали эту процедуру за годы и можем гарантировать, что она будет работать для небольших сообществ на VPS с 1 ГБ ОЗУ. Она даже завершает дополнительные воркеры Unicorn, чтобы освободить память во время обновления и помочь.
Вы можете прочитать код, который появился в этом коммите:
Если вы сможете воспроизвести сбой на дроплете Digital Ocean, мы с радостью поможем разобраться.
Если это необходимо, вы можете форкнуть плагин и настроить его под свои нужды.
Спасибо, теперь у меня есть представление. (Два очень важных момента: эти настройки сборщика мусора (GC) настроены специально для обновлений, и единицы измерения — байты, поэтому текущий лимит установлен на 20 МБ. В этой предыдущей теме есть полезные и интересные детали [архивная ссылка, так как сейчас она мне недоступна].)
Это, безусловно, устаревшая информация: в последней версии Ruby существует несколько ограничений для malloc. Это интересная тема с исторической ценностью, но наверху обязательно должен быть крупный знак «Устаревшая информация».
Наш процесс обновления уже работает на пределе возможностей; лучшее, что мы можем сделать сверх этого, — это снизить доступность. Если память сильно ограничена, вам придётся мириться с перебоями в работе при обновлении.