Обновление 2.6.0 beta 3 не удалось из-за нехватки места на диске и/или в памяти

Интересно, не превысил ли процесс обновления доступную память (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 ГБ дискового пространства, то, возможно, это создаёт идеальный шторм во время обновления, когда использование диска уже и так высокое?

du -kx / | sort -n | tail -33 теперь выдаёт мне:

root@nz:~# du -kx / | sort -n | tail -33
505512  /usr/bin
528784  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse/vendor/bundle/ruby/2.6.0
528788  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse/vendor/bundle/ruby
528792  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse/vendor/bundle
536848  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse/vendor
548952  /var/lib/docker/overlay2/c126267f944d8d7f12415ac4f5908eba8a6a686b093cad3e0115eded8edfd6ba/diff
548968  /var/lib/docker/overlay2/c126267f944d8d7f12415ac4f5908eba8a6a686b093cad3e0115eded8edfd6ba
817700  /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/usr/lib
827812  /var/log/journal/8bebc832e1a692c83690ffe65e1256e3
868792  /var/log/journal
1069356 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www/discourse
1069368 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var/www
1069396 /var/log
1142352 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/var
1202004 /var/discourse/shared/standalone/import/data
1307816 /var/discourse/shared/standalone/import
1362804 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff/usr
1399332 /var/discourse/shared/standalone/backups/default
1399336 /var/discourse/shared/standalone/backups
1709408 /usr
2438224 /var/discourse/shared/standalone/postgres_data/base/16583
2462944 /var/discourse/shared/standalone/postgres_data/base
2481288 /var/discourse/shared/standalone/postgres_data
2540188 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35/diff
2540204 /var/lib/docker/overlay2/3b68a713bd8e9a7f3b2a69ba8084a770b796e555e887ce4f66698d3894430c35
3387776 /var/lib/docker/overlay2
3460136 /var/lib/docker
3830584 /var/lib
5629420 /var/discourse/shared/standalone
5629504 /var/discourse/shared
5632224 /var/discourse
10747244        /var
14961492        /
root@nz:~#

Думаю, это можно улучшить с помощью journalctl, например, так:

# journalctl --vacuum-size=50M

(что можно выполнить непосредственно перед попыткой обновления).

Интересно, что использование PostgreSQL не снизилось.

Команда free покажет использование подкачки: занято 17% от некоторого объёма, вероятно, 2 ГБ.

Очевидно, что ваша машина немного маловата: вам нужно больше оперативной памяти или больше подкачки, но практически нельзя увеличить подкачку, не добавив больше места на диске.

Приношу извинения — вы абсолютно правы. 1 ГБ — это оперативная память, а не использованное место на диске.

Опять абсолютно верно

root@nz:~# free
              total        used        free      shared  buff/cache   available
Mem:        1008828      655660       61716      102288      291452       96576
Swap:       2097148      459776     1637372

Интересно, не стоит ли процессу обновления проверять возможности хост-системы на предмет достаточности ресурсов для установки обновления непосредственно перед его запуском?

Я думаю, это отчасти похоже на предсказание будущего! Проверка наличия 5 ГБ свободного места на диске, безусловно, полезна, но не гарантирует абсолютной надёжности. Свободная оперативная память — дело более сложное: довольно трудно точно определить, сколько её потребуется. Это, я полагаю, будет зависеть от того, насколько крупным стал форум, а возможно, и от того, какие компоненты затрагиваются при каждом обновлении.

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

К сожалению, я нахожусь на крайнем конце шкалы «минимизация расходов» — форум является чисто волонтёрским проектом и не приносит дохода, а с добавлением возможности публикации через электронную почту (через MailGun), которую требуют пользователи, мне каждый месяц приходится тратить деньги, чтобы поддерживать его работу.

Если сравнивать с хобби, то это дешевле, чем тусоваться в ночных клубах, я думаю!