Чтобы устранить предупреждение Nextcloud «Неправильно настроен PHP OPcache», откройте полное предупреждение в разделе «Администрирование» → «Обзор», затем увеличьте только указанное в нем ограничение OPcache в конфигурации PHP, используемой веб-сервером. Перезапустите соответствующую службу PHP и снова проверьте предупреждение; изменение только конфигурации PHP в командной строке может не изменить то, что использует Nextcloud.
Например, если Nextcloud сообщает, что буфер интернированных строк почти заполнен, увеличение его размера opcache.interned_strings_bufferс 16 до 32 МБ является разумной первой корректировкой, если у сервера достаточно оперативной памяти. Другое предупреждение, касающееся кэшированных скриптов или разделяемой памяти, требует другой настройки.
Почему Nextcloud отображает это предупреждение OPcache?
OPcache хранит скомпилированный байт-код PHP в общей памяти, уменьшая объем компиляции, необходимой для повторных веб-запросов. Он также резервирует место для интернированных строк, что позволяет PHP повторно использовать идентичные строки. Эти возможности являются отдельными ограничениями, поэтому расширение одного из них не обязательно решит проблему с предупреждением о другом.
Согласно документации по настройке сервера Nextcloud 35 , панель администрирования выдает предупреждение, когда лимит размера OPcache превышает 90% от выделенной емкости. В сообщении может конкретно упоминаться почти заполненный буфер интернированных строк, ограниченное количество кэшированных скриптов или недостаточное количество общей памяти. Эта деталь определяет способ устранения проблемы.
Nextcloud также требует этого opcache.save_comments=1, поскольку он зависит от сохранения комментариев в PHP-коде. Поэтому отключение расширения OPcache или отключение сохранения комментариев является проблемой конфигурации, а не просто проблемой размера кэша.
1. Определите ситуацию, требующую внимания.
Войдите в систему как администратор, перейдите в раздел «Настройки администрирования» → «Обзор» и прочтите полное предупреждение OPcache. Запишите точную директиву, если она указана. Не следует предполагать, что каждое предупреждение OPcache означает недостаточный размер буфера интернированных строк.
- Буфер интернированных строк почти заполнен: проверьте
opcache.interned_strings_buffer.
- Разделяемая память OPcache почти заполнена: проверьте
opcache.memory_consumption.
- Количество кэшированных скриптов или ключей приближается к пределу: проверьте
opcache.max_accelerated_files.
- OPcache отключен или комментарии не сохраняются: проверьте
opcache.enableи opcache.save_comments.
2. Найдите конфигурацию PHP, обслуживающую Nextcloud.
На серверах Debian или Ubuntu, использующих PHP-FPM, конфигурация PHP обычно организуется по версии PHP и API сервера. Например, PHP 8.3 FPM может читать файлы в каталоге `/etc/php` /etc/php/8.3/fpm/conf.d/, в то время как модуль PHP Apache может использовать `/ etc/php` /etc/php/8.3/apache2/conf.d/.
Чтобы узнать, какие службы PHP-FPM доступны на хосте с systemd, выполните следующую команду:
systemctl list-units --type=service 'php*-fpm.service'
Проверьте соответствующие файлы OPcache, заменив установленную вами версию PHP:
sudo ls -l /etc/php/8.3/fpm/conf.d/*opcache*
sudo grep -R 'opcache\.' /etc/php/8.3/fpm/conf.d/
Если файлы не найдены, проверьте основные php.iniи пакетные соглашения вашего дистрибутива. Эта команда php --iniполезна для определения конфигурации PHP в командной строке , но CLI и PHP-FPM могут загружать разные настройки.
Для Docker или Nextcloud All-in-One проверьте конфигурацию PHP внутри контейнера Nextcloud и используйте поддерживаемый метод постоянной конфигурации. Редактирование /etc/phpфайлов hosts обычно не приводит к настройке PHP внутри контейнера; редактирование сгенерированного файла контейнера также может быть отменено при повторном создании.
3. Увеличьте сообщаемый лимит, не изменяя несвязанные настройки.
Перед внесением изменений обязательно сделайте резервную копию соответствующего конфигурационного файла. В стандартной установке PHP-FPM в Debian/Ubuntu одним из поддерживаемых подходов является добавление локального переопределения в conf.dкаталог FPM соответствующей версии PHP. Перед продолжением убедитесь, что этот каталог действительно загружен вашей установкой PHP-FPM.
В примере с буфером интернированных строк создайте или отредактируйте локальное переопределение, например /etc/php/8.3/fpm/conf.d/99-nextcloud-opcache.ini:
; Example for a warning about interned strings
opcache.interned_strings_buffer=32
Здесь 32имеется в виду 32 МБ, а не 32 байта. Итоговое значение должно соответствовать фактическому использованию и доступному объему оперативной памяти.
Если в предупреждении указан другой предел, используйте соответствующий пример вместо того, чтобы слепо складывать все три:
; Example only: larger shared bytecode cache
opcache.memory_consumption=256
; Example only: allow more cached script keys
opcache.max_accelerated_files=20000
Значения opcache.memory_consumptionуказываются в мегабайтах, тогда как opcache.max_accelerated_filesзадает ограничение на количество ключей скрипта. В официальном справочнике по конфигурации PHP OPcache объясняется их единица измерения, значения по умолчанию и возможность изменения.
Если предупреждение указывает на отключенный OPcache или отсутствие комментариев, а не на нехватку памяти, проверьте вместо этого следующие настройки:
opcache.enable=1
opcache.save_comments=1
Не стоит выключать устройство opcache.validate_timestampsили значительно увеличивать время его работы opcache.revalidate_freqтолько для того, чтобы проигнорировать это предупреждение. Nextcloud предупреждает, что задержка повторной проверки кэша может помешать своевременному вступлению в силу изменений конфигурации и обновлений.
4. Примените новую конфигурацию.
Для примера сервера, работающего под управлением PHP 8.3 через PHP-FPM, сначала проверьте конфигурацию службы, а затем перезапустите соответствующую службу во время короткого периода технического обслуживания:
sudo php-fpm8.3 -t
sudo systemctl restart php8.3-fpm
Замените 8.3на установленную версию PHP-FPM и подтвердите имя исполняемого файла и службы перед выполнением любой из команд. Перезапуск прерывает обработку запросов этим пулом. В Apache с mod_phpсоответствующим сервисом будет Apache, а не PHP-FPM; для контейнеров примените описанную в вашем развертывании процедуру перезапуска или создания, сохранив при этом конфигурацию.
Если перезапуск службы не удаётся, восстановите резервную копию конфигурации и проверьте журнал ошибок PHP-FPM или веб-сервера.
5. Если предупреждение не исчезло, проверьте действующие настройки PHP для веб-приложения.
После перезапуска PHP-процессов сначала перезагрузите раздел «Администрирование» → «Обзор». Если предупреждение сохраняется, убедитесь, что измененная директива действительно загружается средой выполнения PHP для веб -приложений , а не только CLI. Проверьте наличие .iniфайла, загружаемого позже, или переопределения пула PHP-FPM, которое заменяет ваше значение.
На контролируемом вами сервере вы можете временно проверить значения PHP-кода веб-страницы, используя диагностическую точку доступа с ограниченным доступом и соответствующую ini_get()функцию PHP. Никогда не оставляйте общедоступную phpinfo()страницу в сети: она может раскрыть информацию об окружении, путях, модулях и других конфиденциальных параметрах конфигурации. Немедленно удаляйте любую диагностическую точку доступа после проверки.
Для получения постоянного оповещения о размере кэша, проверяйте фактическое использование OPcache при нормальной нагрузке, а не многократное удвоение значений. В документации PHPopcache_get_status() описана статистика использования памяти, интернированных строк и кэшированных скриптов, доступная запущенному процессу PHP.
В официальных образах Docker и развертываниях All-in-One Nextcloud используются собственные настройки PHP по умолчанию; не следует предполагать, что изменения на уровне хоста или рекомендуемые значения из другой установки сохранятся. Для получения информации о модели конфигурации, соответствующей вашему развертыванию, обратитесь к официальному репозиторию Docker Nextcloud или официальному репозиторию All-in-One .
Убедитесь, что исправление сработало.
Вернитесь в раздел «Администрирование» → «Обзор» и убедитесь, что предупреждение OPcache исчезло. Откройте и перезагрузите несколько страниц Nextcloud, чтобы убедиться, что приложение по-прежнему работает нормально. Если предупреждение возвращается после обычного использования, повторно проверьте тот же измеренный лимит и эффективную конфигурацию PHP веб-приложения; цель состоит в том, чтобы оставить достаточный запас памяти, не выделяя лишнюю память для OPcache.