Интересно, не превысил ли процесс обновления доступную память (1 ГБ), выделенную для дропета, помимо проблем с местом на диске? В приведенном выше скриншоте консоли видно упоминание «Out of memory» как первой записи после выполнения ./launcher rebuild app.
Я не упомянул, что после этой попытки консоль перестала отвечать (хотя в тот момент я использовал веб-консоль в панели управления DigitalOcean, которая всегда нестабильна), и я перезагрузил дроплет. (В дальнейшем я использовал PuTTY.)
В любом случае, нехорошо, что обновление было сообщено как успешное через страницу обновления Discourse, несмотря на то, что, по-видимому, возникли те же проблемы с памятью и/или местом на диске.
Ах, сработал OOM-киллер. Это определённо нехорошо. Обычно я рекомендую увеличить пространство подкачки. Текущее использование можно посмотреть с помощью команды swapon, в моём случае:
# swapon
NAME TYPE SIZE USED PRIO
/swapfile file 2G 3M -2
Также команда free:
# free
total used free shared buff/cache available
Mem: 1992060 792904 80148 34696 1119008 1004956
Swap: 2097148 3084 2094064
Было бы плохо, если бы ваш файл подкачки объёмом 2 ГБ не использовался. Плохо то, что вы не можете добавить подкачку, не расходуя место на диске!
Один из способов освободить место на диске для обновления — скопировать все файлы резервных копий в другое место, проверить их целостность, а затем удалить их с вашего сервера. Вам абсолютно необходим надёжный свежий резервный копию в безопасном месте перед обновлением, на всякий случай, но она не обязательно должна находиться на самом сервере. Я бы чувствовал себя спокойно, удалив все, кроме последней копии, но обязательно сделал бы её офлайн-копию.
Хорошо бы снова посмотреть результаты команды du, теперь, когда вы выполнили все очистки.
Интересно: это 1 ГБ — ваше выделение оперативной памяти, а 25 ГБ — выделение диска? Это совершенно разные вещи.
Редактирование: насколько я понимаю, стандартная рекомендация — иметь больше, чем 1 ГБ оперативной памяти.
Редактирование: нет, видимо, 1 ГБ всё ещё остаётся абсолютным рекомендуемым минимумом.
Я только что снова подключился, и информация о системе, отображаемая при запуске окна консоли, следующая:
Загрузка системы: 0.01 Процессы: 136
Использование /: 59,4% от 24,06 ГБ Пользователей в системе: 0
Использование памяти: 73% IP-адрес для eth0: 159.65.140.176
Использование своп-памяти: 17% IP-адрес для docker0: 172.17.0.1
Таким образом, использование своп-памяти 17% = 4 ГБ?
При том, что в форум никто не вошел, и активно только текущее соединение PuTTY с дроплетом, оперативная память заполнена на 73% — значит, для перехода форума на своп-память потребуется совсем немного активности. А если это происходит за счёт 24 ГБ дискового пространства, то, возможно, это создаёт идеальный шторм во время обновления, когда использование диска уже и так высокое?
Думаю, это можно улучшить с помощью journalctl, например, так:
# journalctl --vacuum-size=50M
(что можно выполнить непосредственно перед попыткой обновления).
Интересно, что использование PostgreSQL не снизилось.
Команда free покажет использование подкачки: занято 17% от некоторого объёма, вероятно, 2 ГБ.
Очевидно, что ваша машина немного маловата: вам нужно больше оперативной памяти или больше подкачки, но практически нельзя увеличить подкачку, не добавив больше места на диске.
root@nz:~# free
total used free shared buff/cache available
Mem: 1008828 655660 61716 102288 291452 96576
Swap: 2097148 459776 1637372
Интересно, не стоит ли процессу обновления проверять возможности хост-системы на предмет достаточности ресурсов для установки обновления непосредственно перед его запуском?
Я думаю, это отчасти похоже на предсказание будущего! Проверка наличия 5 ГБ свободного места на диске, безусловно, полезна, но не гарантирует абсолютной надёжности. Свободная оперативная память — дело более сложное: довольно трудно точно определить, сколько её потребуется. Это, я полагаю, будет зависеть от того, насколько крупным стал форум, а возможно, и от того, какие компоненты затрагиваются при каждом обновлении.
Я стараюсь минимизировать расходы, поэтому трачу время на то, чтобы уместиться на недорогом сервере. Но в конце концов, по мере роста форума, surely стоит перейти на следующий уровень. Это, конечно, потребует затрат, но сэкономит время и силы.
К сожалению, я нахожусь на крайнем конце шкалы «минимизация расходов» — форум является чисто волонтёрским проектом и не приносит дохода, а с добавлением возможности публикации через электронную почту (через MailGun), которую требуют пользователи, мне каждый месяц приходится тратить деньги, чтобы поддерживать его работу.
Если сравнивать с хобби, то это дешевле, чем тусоваться в ночных клубах, я думаю!