Недавно я обновил Discourse с версии 3.4.0.beta1 до 3.4.0.beta3. После обновления мы заметили, что использование памяти форумом постепенно увеличивается, что приводит к падению приложения. При проверке сервера видно, что redis-server потребляет 95% памяти.
Мы ежедневно запускаем redis-cli flushall, чтобы временно решить проблему. Экземпляр Discourse размещён в Docker.
Я попытался откатиться до предыдущей версии, но при пересборке возникло несколько ошибок.
В качестве временного решения я создал небольшой bash-скрипт для очистки памяти Redis и настроил его запуск ежедневно в 6:00 с помощью cron.
Примечание: Я сохраняю логи в /home/ubuntu/logs. Вы можете проигнорировать это, если вам это не нужно.
#!/bin/bash
# Установить директорию и имя файла лога
LOG_DIR="/home/ubuntu/logs"
LOG_FILE="$LOG_DIR/redis.cleanup.$(date +\%Y-\%m-\%d).log"
# Убедиться, что директория логов существует
mkdir -p "$LOG_DIR"
# Записать информацию об окружающей среде (сторона хоста)
echo "Запуск скрипта в $(date)" >> "$LOG_FILE"
# Запустить загрузчик Discourse в приложении и сохранить вывод в файл лога (сторона хоста)
echo "Команда очистки Redis" >> "$LOG_FILE"
docker exec app redis-cli flushall >> "$LOG_FILE" 2>&1
# Указать, что скрипт завершен (сторона хоста), и выйти
echo "Скрипт успешно выполнен в $(date)" >> "$LOG_FILE"
exit 0
Обновление: Похоже, проблема исправилась автоматически. Теперь, когда я вспоминаю, у нас была похожая проблема в прошлый раз при обновлении версии — потребление памяти продолжало расти, но через некоторое время всё приходило в норму. Похоже, это баг.