Исправлена ​​ошибка «Ограничение памяти PHP ниже рекомендуемого значения» в ownCloud 10.

В результате вы получите не просто «предупреждение исчезло». Правильное решение означает, что процесс PHP, который фактически обслуживает ownCloud 10, сообщает об ограничении памяти не менее чем в 512 МБ, предупреждение администратора ownCloud исчезает, запланированные или CLI-задания также используют соответствующее ограничение, и у хоста по-прежнему достаточно физической памяти для запуска PHP, веб-сервера, базы данных и фоновых задач без интенсивного использования файла подкачки.

Для ownCloud Classic 10.16 официальная среда Docker использует OWNCLOUD_MEMORY_LIMIT=512Mв качестве рекомендуемого значения по умолчанию. В документации ownCloud также различается конфигурация PHP, используемая веб-сервером, и конфигурация PHP, используемая php-cli. Это различие является основной причиной, по которой администраторы иногда меняют memory_limit, перезапускают службу и все равно видят то же предупреждение.

В этом руководстве сначала рассматриваются наименее ресурсоемкие проверки, а затем приводятся пути к Apache, PHP-FPM, CLI и Docker. Также объясняется, когда оправдано дальнейшее увеличение лимита, а когда реальная проблема заключается в недостатке оперативной памяти хоста, а не в самой настройке PHP.

Как выглядит успех

ПроверятьХороший результатЕсли это не удастся
Обзор административной панели ownCloudПредупреждение «Ограничение памяти PHP ниже рекомендуемого значения» отсутствует.Вероятно, вы отредактировали не ту конфигурацию PHP или не перезапустили нужную службу.
Среда выполнения Web PHPmemory_limitпоказывает 512 МБ или вышеНайдите загруженный файл конфигурации, используемый веб-запросом.
Среда выполнения CLI / cronphp -r 'echo ini_get("memory_limit");'показывает предполагаемое значениеОтредактируйте php.iniтакже параметры, специфичные для командной строки.
Память хостаДостаточно оперативной памяти; минимальное или полное отсутствие постоянного давления подкачки.Не стоит слепо увеличивать лимиты PHP. Пересмотрите количество рабочих процессов PHP или размер хоста.
ЖурналыОшибок «Исчерпан допустимый объем памяти» не повторялось.Прежде чем снова повышать лимит, определите задачу, потребляющую больше всего памяти.

1. Подтвердите предупреждение и значение, которое видит ownCloud.

В административной панели ownCloud 10 отображается предупреждение о том, что лимит памяти PHP ниже рекомендуемого значения и составляет 128 МБ.
Начните с значения, видимого самому ownCloud. Ограничение на размер среды выполнения веб-приложения в 128 МБ или 256 МБ ниже значения в 512 МБ, используемого в рекомендуемой конфигурации Docker от ownCloud.

Откройте настройки администрирования ownCloud и обратите внимание на предупреждение об ограничении памяти. Прежде чем что-либо менять, запишите версию ownCloud, версию PHP, тип веб-сервера и текущий лимит памяти. Это даст вам базовые данные и поможет избежать изменения неправильной установки PHP в системах с несколькими версиями PHP.

В текущей документации ownCloud для версии 10.16 указано, что требования к серверу сильно зависят от количества пользователей, файлов и активности. В настройках Docker OWNCLOUD_MEMORY_LIMIT=512Mрекомендуется сохранять эти значения по умолчанию. Таким образом, 512 МБ — это разумный базовый показатель для устранения предупреждения, но не гарантия того, что каждая рабочая нагрузка поместится в 512 МБ.

Официальные источники: рекомендации по развертыванию ownCloud и переменные среды Docker для ownCloud .

2. Не следует полагаться на значение CLI как на представление веб-сервера.

В терминале Ubuntu отображаются команды php -i и php --ini с ограничением памяти CLI в 128 МБ и путем к файлу php.ini в командной строке.
php --iniСообщает о конфигурации для PHP CLI. Она может отличаться от конфигурации PHP, используемой Apache или PHP-FPM для обслуживания ownCloud.

Выполните следующие команды, чтобы увидеть, что использует процесс PHP из командной строки:

php --ini
php -r 'echo ini_get("memory_limit"), PHP_EOL;'

Это полезно для occзаданий cron, но не является доказательством того, что именно используется в веб-запросе. ownCloud явно указывает отдельные пути конфигурации, такие как:

/etc/php/<version>/apache2/php.ini
/etc/php/<version>/fpm/php.ini
/etc/php/<version>/cli/php.ini

Если в командной строке отображается 512 МБ, а страница администрирования по-прежнему выдает ошибку, это явное свидетельство того, что веб-сервер загружает другой файл php.ini.

См. примечания ownCloud по настройке PHP , в которых особо предупреждается о том, что настройки PHP, возможно, потребуется изменить более чем в одном INI-файле.

3. Найдите конфигурацию PHP, используемую веб-запросом.

На странице phpinfo в браузере отображается загруженный файл конфигурации PHP-FPM и значение memory_limit 128M рядом с терминалом, показывающим конфигурацию CLI.
Сравните среду выполнения PHP в браузере со средой выполнения CLI. Для предупреждения ownCloud в веб-интерфейсе важен файл конфигурации, загруженный в браузере.

Наиболее надежный способ проверки — это анализ PHP-кода из того же веб-стека, который обслуживает ownCloud. В документации ownCloud описывается использование временной phpinfo.phpстраницы:

<?php phpinfo(); ?>

Временно поместите его в корневую папку веб-сайта, откройте в браузере и найдите:

  • Загружен файл конфигурации
  • memory_limit
  • API сервера

Затем немедленно удалите файл phpinfo . ownCloud предупреждает, что оставление общедоступной страницы phpinfo раскрывает конфиденциальную информацию сервера.

Если браузер выдает ошибку, /etc/php/7.4/fpm/php.iniа браузер php --iniвыдает ошибку /etc/php/7.4/cli/php.ini, то теперь вы точно знаете, почему редактирование файла командной строки не устранило предупреждение.

4. PHP-FPM: увеличить лимит среды выполнения веб-приложений до 512 МБ.

В редакторе Nano открыт файл php.ini с поддержкой PHP-FPM, в котором параметр memory_limit установлен на 512 МБ.
Для настройки Nginx или Apache с использованием PHP-FPM необходимо изменить не только CLI-файл, но и FPM php.iniили соответствующее переопределение пула/сайта.

В типичной установке Debian или Ubuntu:

sudo nano /etc/php/7.4/fpm/php.ini

Находить:

memory_limit = 128M

и изменить на:

memory_limit = 512M

Укажите в пути версию PHP, которая у вас установлена. Затем перезапустите соответствующую службу FPM и, при необходимости, веб-сервер:

sudo systemctl restart php7.4-fpm
sudo systemctl reload nginx

Для Apache с proxy_fcgiустановленным FPM или другой подобной системой перезапустите PHP-FPM и перезагрузите Apache.

ownCloud также отмечает, что PHP-FPM не использует настройки PHP из .htaccess. Если вы полагаетесь на переопределение настроек для каждого каталога с помощью FPM, используйте поддерживаемый механизм конфигурации PHP/FPM для вашей среды, например php.ini, соответствующую конфигурацию пула или .user.ini.

5. Apache с mod_php: отредактируйте конфигурацию PHP в Apache.

В редакторе Nano отображается значение memory_limit, установленное на 512 МБ в файле Apache php.ini, после чего выполняется команда перезапуска Apache.
При использовании модуля Apache mod_php отредактируйте конфигурацию PHP, специфичную для Apache, и перезапустите Apache, чтобы новые рабочие процессы загружали новый лимит.

Если Apache загружает PHP напрямую как модуль, отредактируйте файл, специфичный для Apache:

sudo nano /etc/php/7.4/apache2/php.ini

Набор:

memory_limit = 512M

Затем перезапустите Apache:

sudo systemctl restart apache2

Не копируйте номер версии механически. Проверьте версию, фактически загруженную Apache. В системах, обновляемых в нескольких версиях PHP, часто сохраняется несколько каталогов в папке /etc/php/.

Критерий результата прост: после перезапуска среда выполнения PHP, доступная для веб-браузера, должна отображать новое значение. Если она по-прежнему показывает 128 МБ, значит, другой уровень конфигурации переопределяет ваши изменения.

6. Обновите ограничение CLI, если occ или cron используют слишком мало памяти.

Предупреждение в веб-интерфейсе администратора обусловлено используемой средой выполнения веб-приложений, а occзадания cron используют PHP CLI. В документации ownCloud это прямо указано.

Редактировать:

sudo nano /etc/php/7.4/cli/php.ini

Набор:

memory_limit = 512M

Затем проверьте:

php -r 'echo ini_get("memory_limit"), PHP_EOL;'

Для PHP, запускаемого через командную строку, перезапускать службу не нужно, поскольку каждый вызов через CLI запускает новый процесс. Но если ваша задача cron явно вызывает другой исполняемый файл PHP, убедитесь, что используется именно этот файл, а не предполагайте, /usr/bin/phpчто используется именно он.

ownCloud рекомендует запускать программу occот имени пользователя HTTP, как правило, www-dataв Debian/Ubuntu. В официальной документации occ также указывается, что occпри установке нескольких версий PHP следует использовать ту же версию PHP, что и веб-сервер.

7. Docker: используйте OWNCLOUD_MEMORY_LIMIT вместо редактирования файлов внутри контейнера.

В файле Docker Compose показано, что параметр OWNCLOUD_MEMORY_LIMIT установлен на 512 МБ, и контейнер ownCloud пересоздается.
Для официального контейнера ownCloud необходимо настроить OWNCLOUD_MEMORY_LIMIT=512Mсреду контейнера и пересоздать службу, чтобы обновить сгенерированную конфигурацию PHP.

Для официального образа Docker ownCloud используйте документированную переменную среды:

environment:
  OWNCLOUD_MEMORY_LIMIT: 512M

Затем создайте сервис заново:

docker compose up -d

Не следует вносить основные исправления, редактируя данные php.iniвнутри временного контейнера. Перезапуск контейнера может привести к аннулированию этих изменений. В официальной документации по среде Docker ownCloud OWNCLOUD_MEMORY_LIMIT=512Mрекомендуется придерживаться этого значения по умолчанию.

Если у хоста Docker установлен жесткий лимит памяти, проверьте также ограничения контейнера:

docker stats

Ограничение PHP в 512 МБ не дает контейнеру автоматически 512 МБ свободной памяти; оно лишь позволяет отдельному PHP-запросу использовать не более этого объема. Контейнеру и хосту по-прежнему требуется достаточно памяти для всех одновременно работающих PHP-процессов и других служб.

8. Перезапустите нужную службу и проверьте ее работу в той же среде выполнения.

В терминале перезапущены PHP-FPM и Nginx, а в обзоре ownCloud отображается ограничение памяти PHP на уровне 512 МБ, проверки пройдены успешно.
Исправление считается завершенным только тогда, когда среда выполнения веб-приложений сообщает о наличии 512 МБ или более памяти, и ownCloud больше не отображает предупреждение о нехватке памяти.

После перезапуска соответствующей службы повторно проверьте временную страницу phpinfo или обзор административной панели ownCloud. Затем удалите страницу phpinfo.

Если вы изменили PHP-FPM, проверьте:

sudo systemctl status php7.4-fpm
sudo systemctl status nginx

Если вы сменили Apache:

sudo systemctl status apache2

Обновите страницу администрирования ownCloud. Предупреждение должно исчезнуть, если ownCloud теперь работает как минимум с ожидаемым лимитом.

9. Перед тем как увеличивать лимит PHP сверх 512 МБ, проверьте объем оперативной памяти хоста.

Терминал Ubuntu отображает свободную память, рабочие процессы PHP-FPM и последние записи в журнале ownCloud.
После повышения лимита на один запрос проверьте общий объем системной памяти и поведение PHP-воркеров. Более высокий лимит PHP может увеличить потребление оперативной памяти в худшем случае, когда активно много воркеров.

Бегать:

free -h
ps aux | grep php-fpm
vmstat 1

Ограничение на использование памяти для каждого скрипта в PHP memory_limit— это не резервирование и не то же самое, что объем оперативной памяти, необходимый серверу. Если у вас 20 PHP-процессов, и вы разрешаете каждому запросу использовать очень большой объем памяти, то теоретически в худшем случае объем оперативной памяти машины может значительно превысить возможности сервера.

В документации по настройке ownCloud дается общее предупреждение для процессов веб-сервера: ограничивайте количество процессов таким образом, чтобы суммарное использование памяти оставалось ниже доступной оперативной памяти, иначе система начнет использовать файл подкачки, и производительность снизится. См. руководство по настройке ownCloud Classic .

Если предупреждение о превышении лимита в 512 миллионов исчезло и обычная работа предприятия идет нормально, нет причин увеличивать лимит просто ради того, чтобы увеличить числовое значение.

10. Если при использовании 512 МБ по-прежнему появляется сообщение «Исчерпан допустимый объем памяти»

Предупреждение о невыполненных рекомендациях и сбой, связанный с исчерпанием памяти, — это разные проблемы. Если в журналах содержатся сообщения следующего вида:

PHP Fatal error: Allowed memory size of ... bytes exhausted

Определите операцию, которая это запускает. Крупномасштабные сканирования, задачи шифрования, операции с внешними хранилищами, обработка изображений или стороннее приложение могут иметь совершенно разные профили использования памяти.

Проверьте журналы ownCloud и журналы ошибок PHP/веб-сервера. Стандартная установка ownCloud записывает собственные журналы в настроенный каталог данных, обычно это data/owncloud.log. Избегайте рассматривать «увеличить до 1 ГБ» как автоматический следующий шаг. Сначала выясните, не приводит ли одна и та же операция к многократному превышению лимита.

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

php -d memory_limit=1G occ <command>

Используйте это только в том случае, если вы понимаете особенности работы команды и памяти. Это не исправляет веб-запросы, выполняемые через PHP-FPM или Apache.

Почему предупреждение может остаться после редактирования файла php.ini

СимптомВероятная причинаСледующая проверка
php -rПоказывает 512 МБ, а ownCloud по-прежнему показывает 128 МБ.Вы изменили только PHP в командной строке.Проверьте информацию в браузере (phpinfo) и загруженный файл конфигурации.
В файле FPM указано 512 МБ, но в браузере по-прежнему отображается 128 МБ.Пул .user.iniили другой INI-файл переопределяет его.Проверьте значения параметров “local” и “master” в файле phpinfo, а также дополнительные проанализированные INI-файлы.
Значение изменяется только после перезагрузки.Правильная служба не была перезапущена.После внесения изменений обязательно перезапустите PHP-FPM или Apache.
После пересоздания значение Docker возвращается к старым настройкам.Вы редактировали содержимое контейнера.Задается OWNCLOUD_MEMORY_LIMITв Compose или в среде развертывания.
Предупреждение исчезает, но сервер начинает подкачку.Параллельная обработка PHP превышает объем памяти хоста.Сократите количество сотрудников, оптимизируйте рабочую нагрузку или увеличьте объем оперативной памяти.

Не путайте memory_limit с upload limits.

memory_limitи решать различные проблемы. Увеличение объема памяти PHP не позволяет пользователям автоматически загружать файлы большего размера. В примечаниях к конфигурации ownCloud 10.16 отдельно указано, что upload_max_filesizeдля достижения минимального значения следует установить значение не менее 512 МБ, и поясняется, что для ограничения скорости загрузки требуются отдельные настройки.post_max_sizepost_max_size

Если реальным симптомом является «сбой загрузки больших файлов», проверьте upload_max_filesizeограничения post_max_sizeразмера тела запроса прокси-сервера/веб-сервера, тайм-ауты и емкость временного диска. Не используйте более высокий уровень memory_limitзащиты вместо этих параметров.

Итоговый контрольный список

  • Подтвердите предупреждение и текущее значение в ownCloud.
  • Определите, использует ли ownCloud модуль Apache mod_php или PHP-FPM.
  • Найдите загруженный конфигурационный файл среды выполнения веб-приложения .
  • Установите для веб-версии PHP memory_limitзначение не ниже 512M.
  • Обновите также PHP для командной строки, если occcron использует более низкий лимит.
  • Для Docker это задается OWNCLOUD_MEMORY_LIMIT=512Mв среде развертывания.
  • Перезапустите или создайте заново службу, которая фактически обслуживает PHP.
  • Проверяйте значение в среде выполнения веб-приложения, а не только в командной строке.
  • Убедитесь, что предупреждение ownCloud исчезло.
  • Перед увеличением лимита сверх 512 МБ необходимо отслеживать объем оперативной памяти и файла подкачки на хосте.

Итог

Простое решение проблемы «Предел памяти PHP ниже рекомендуемого значения» в ownCloud 10 заключается в том, чтобы установить для среды выполнения PHP, которая фактически обслуживает ownCloud, ограничение в 512 МБ или выше, а затем проверить этот результат в той же среде выполнения. Наиболее распространенная ошибка возникает при редактировании конфигурационного файла /etc/php/.../cli/php.iniво время работы ownCloud через PHP-FPM или Apache с использованием другого файла конфигурации.

Остановитесь, как только предупреждение исчезнет, ​​обычные операции будут выполняться корректно, и у хоста будет достаточный запас памяти. Если PHP по-прежнему израсходует 512 МБ во время конкретной операции, переключитесь с «увеличения числа» на диагностику рабочей нагрузки: проверьте команду, вызвавшую сбой, приложения, журналы, параллелизм и физическую оперативную память. Более высокий лимит может быть уместен, но только если рабочая нагрузка это оправдывает и сервер может безопасно его поддерживать.

Оставить комментарий

Устранение проблемы высокой загрузки ЦП в Jitsi Meet в браузерах клиентов.

Устранение проблемы высокой загрузки ЦП в Jitsi Meet в браузерах клиентов.

Диагностика скачков загрузки ЦП в браузере Jitsi Meet и снижение нагрузки на клиентское приложение путем проверки видеофайлов, эффектов камеры, графики браузера и настроек хоста.

Как отслеживать метрики Jitsi Videobridge с помощью Prometheus и Grafana

Как отслеживать метрики Jitsi Videobridge с помощью Prometheus и Grafana

Отслеживайте состояние Jitsi Videobridge, загрузку конференций и трафик с помощью встроенной точки доступа Prometheus, а затем анализируйте и отображайте данные в виде графиков в Grafana.

Как настроить пользовательское доменное имя для Jitsi Meet Docker

Как настроить пользовательское доменное имя для Jitsi Meet Docker

Настройте собственный домен для Jitsi Meet Docker с указанием DNS, PUBLIC_URL, HTTPS, Let's Encrypt, портов брандмауэра, настроек NAT и сквозной проверки.

Fix Zimbra Admin Console 404 Not Found After SSL Renewal

Fix Zimbra Admin Console 404 Not Found After SSL Renewal

Fix Zimbra Admin Console 404 errors after SSL renewal by checking the correct URL and port, proxy routing, service status, deployed certificates, and logs.

Исправлено предупреждение Nextcloud «Неправильно настроен PHP OPcache».

Исправлено предупреждение Nextcloud «Неправильно настроен PHP OPcache».

Узнайте, как диагностировать и устранять предупреждение Nextcloud о конфигурации PHP OPcache, проверив активные параметры PHP SAPI, ограничения размера, комментарии и настройки повторной проверки.

Исправление ошибок миграции базы данных Kopano после обновления версии MySQL.

Исправление ошибок миграции базы данных Kopano после обновления версии MySQL.

Для устранения неполадок, возникающих при миграции базы данных Kopano после обновления MySQL или MariaDB, проверьте резервные копии, версии серверов, режимы SQL, кодировку, состояние схемы и журналы.

Как настроить аутентификацию LDAP и Active Directory в Nextcloud

Как настроить аутентификацию LDAP и Active Directory в Nextcloud

Подключите Nextcloud к LDAP или Active Directory с помощью защищенного канала связи, фильтров пользователей и групп, атрибутов входа в систему и проверенной процедуры развертывания.

Как исправить уведомления Element Android без сервисов Google: руководство по UnifiedPush

Как исправить уведомления Element Android без сервисов Google: руководство по UnifiedPush

Исправление проблем с уведомлениями Element Android на телефонах без привязки к Google путем настройки UnifiedPush, разрешений Android, параметров батареи и надежных тестов проверки.

Исправлено предупреждение Nextcloud «В базе данных отсутствуют некоторые индексы».

Исправлено предупреждение Nextcloud «В базе данных отсутствуют некоторые индексы».

Удалите предупреждение Nextcloud об отсутствии индексов в базе данных с помощью официальной команды occ. Сначала сделайте резервную копию, просмотрите изменения, выполните восстановление и проверьте результат.

Как настроить единый вход (SSO) с помощью Keycloak в Element Web

Как настроить единый вход (SSO) с помощью Keycloak в Element Web

Настройте единый вход Keycloak для Element Web, подключив OIDC к Synapse, задав точный URL-адрес обратного вызова, сопоставив данные пользователя и протестировав выход из системы.