Тюнинг производительности Nextcloud на скромном железе
Мой первый Nextcloud работал на двухъядерном Celeron с 4 ГБ памяти, и папка с тысячей фотографий открывалась секунд десять. Сейчас на похожем железе всё летает. Вот изменения, которые дали заметный эффект, в порядке пользы.
1. Фоновые задачи через системный cron
По умолчанию Nextcloud выполняет фоновые задачи в режиме AJAX, то есть при загрузке страниц пользователями. Это медленно и ненадёжно. Переключаю на cron:
occ background:cron
*/5 * * * * php -f /var/www/html/cron.php
В Docker это либо отдельный контейнер с тем же образом и командой cron.sh, либо задача на хосте через docker exec.
2. OPcache
PHP без OPcache каждый раз заново компилирует скрипты. В официальном образе он включён, но буфер по умолчанию маловат. Я ставлю opcache.memory_consumption=256 и opcache.interned_strings_buffer=16. Предупреждение про interned strings на странице «Обзор» как раз об этом.
3. Redis для кэша и блокировок
APCu я использую как локальный кэш, а Redis для распределённого кэша и, главное, для блокировок файлов. Без Redis блокировки хранятся в базе, а это множество мелких запросов на каждую операцию с файлом. После перехода на Redis синхронизация большого каталога ускорилась у меня примерно в два раза.
4. Настройки PHP-FPM
Если используется FPM, параметры pm.max_children по умолчанию рассчитаны на крохотный сервер. Считаю так: свободная память под PHP, делённая на средний размер процесса (для Nextcloud это 60–100 МБ). На 4 ГБ у меня получилось около 20 процессов.
5. Превью
Генерация миниатюр на лету — главная причина медленных галерей. Приложение Preview Generator заранее создаёт превью по cron. Ещё я ограничиваю максимальный размер превью в config.php: preview_max_x и preview_max_y по 2048. Огромные миниатюры никому не нужны, а место и время они съедают.
6. База данных
PostgreSQL на SSD и пара параметров (shared_buffers около четверти памяти, effective_cache_size около половины) решают большинство проблем. После мажорных обновлений не забываю про occ db:add-missing-indices: без нужных индексов некоторые запросы деградируют на порядок.
Чего не стоит делать
Не стоит отключать проверку целостности или функции безопасности ради скорости: выигрыш копеечный, а риск реальный. И не стоит гнаться за синтетическими тестами. Лучший показатель — насколько быстро открывается ваша обычная папка с фотографиями.