Снизить частоту перепекания, чтобы избежать нехватки памяти?

Я пытаюсь пересобрать 45 тысяч постов, так как изменил URL S3 CDN, но процесс постоянно исчерпывает память и завершается с ошибкой.

Я прочитал статью о создании файла подкачки…

Первые две команды прошли успешно…

  1. Создание пустого файла подкачки

    install -o root -g root -m 0600 /dev/null /swapfile

  2. Запись файла размером 2 ГБ с именем «swapfile»

    dd if=/dev/zero of=/swapfile bs=1k count=2048k

Однако при выполнении mkswap /swapfile возникла ошибка…

mkswap error swapfile is mounted will not make swapspace

Я попробовал другой вариант…

swapoff /swapfile && rm /swapfile

но получил ошибку…

swapoff: Not superuser

Я использую Droplet от Digital Ocean, так что, видимо, у меня нет необходимых прав?

Сталкнувшись с этими проблемами, я решил просто пересобрать необработанные посты, выполнив…

rake posts:rebake_uncooked_posts

Процесс запускается на несколько сотен, а если повезет, то на несколько тысяч постов, а затем снова завершается. После того как я контролировал этот процесс с вчерашнего дня, я сам стал «полупечёным». :wink:

Есть ли способ запустить команду пересборки с ограничением скорости? Мне не важно, сколько времени это займёт — хоть всю ночь, главное, чтобы процесс перестал завершаться с ошибкой.

Буду очень признателен за любую помощь.

Странно, но пока я всё это описывал, я запустил процесс без предварительной подготовки ещё раз. Ушёл на долгий обед с друзьями, а вернулся — всё уже выполнено на 100%. Не знаю, наконец-то заработал ли файл подкачки или это просто совпадение по времени при низкой нагрузке, но…

Готово, наконец!

Возможно, если у кого-то есть ответ, он поможет кому-то другому или мне в следующий раз.

На Ubuntu:

Sudo -i

На Debian:

Su -

Спасибо. Не уверен, правильно ли я это сделал.

Это выглядит неправильно. Какие инструкции вы следуете?

И почему вы создаете swap внутри контейнера? Swap должен создаваться на хосте, а не внутри контейнера.

Потому что я лишь поверхностно разбираюсь в том, что делаю. :wink:

То есть это относится к уровню ubuntu:, а не к уровням ubuntu:/var/discourse или ubuntu-app:/var/www/discourse?

Есть ли какие-то идеи по поводу ограничения при ребейке?

Я никогда не видел, чтобы перепропекание ограничивалось. Это асинхронный процесс: задачи ставятся в очередь и обрабатываются в фоновом режиме.

Окей, спасибо. У меня сейчас закончился перепек, так что я считаю себя везунчиком и перестану с этим возиться. :smiley:

Предупреждение :warning:: не выполняйте действия слепо на производственном сайте, есть высокий риск того, что что-то пойдёт не так, и у вас не будет реального способа это исправить.

Нет, это не уровень ubuntu:.

Вы выполняли ./launcher enter app перед попыткой создания swap-файла? Если да, то этого делать не следовало.

Когда вы впервые входите на сервер, вы находитесь на хосте; когда вы вводите app, вы выполняете действия внутри контейнера.

Swap-файл нужно создавать на хосте, приложение работает внутри контейнера — именно к нему вы обращаетесь для выполнения команды rebake.

Ок, спасибо за совет.

Наш форум — это просто группа друзей, и у нас есть хорошие резервные копии, так что если я его «поджарю» на неделю или около того, нам просто придётся потерпеть GroupMe. :wink:

Это означает, что у вас уже есть файл подкачки с именем /swapfile, и он используется.

Если вы хотите увеличить его размер, остановите контейнер, затем отмонтируйте файл подкачки, выполните команду dd для увеличения его размера, а затем команду mkswap.

Если это сообщение прочитает кто-то другой, я рекомендую выполнить grep swap discourse-setup и посмотреть команды в выводе. Это немного более простой способ понять, что нужно сделать.

Часто я служу примером того, как не надо делать.

Спасибо за дополнение.

Не знаю, как у вас, но у меня неоднократно возникала нехватка памяти во время длительного процесса пересборки. Создание файла подкачки размером 2 ГБ немного помогло (было пересобрано больше постов), но через некоторое время снова возникала ошибка нехватки памяти (OOM). Увеличил размер файла подкачки до 4 ГБ, и тогда удалось пересобрать все мои посты.

До этого я ничего не знал о файлах подкачки, кроме этой инструкции Create a swapfile for your Linux server, но ChatGPT оказался достаточно компетентным, чтобы помочь мне увеличить размер файла подкачки без проблем.

Одна из моих проблем заключается в том, что я плохо понимаю, что именно нужно делать и в какой области: внутри или вне контейнера, внутри или вне приложения. Я стараюсь вести хорошие заметки и создаю ментальные сокращения для вещей, которые буду использовать снова. Но как только я начинаю это понимать, моя задача завершается, и я не возвращаюсь к этому ещё 6, 12 или даже 18 месяцев. Тогда мне приходится заново разбираться в этом.

Звучит как вся жизнь любого системного администратора :joy:

Мое решение — делать заметки, а затем создавать небольшую инструкцию здесь, на Meta:

Я делаю из этого вики-страницу, чтобы другие могли редактировать её, если найдут ошибку или упущение. А в следующий раз, когда мне снова понадобится это сделать…