Главная
» СЕТЕВОЙ АДМИНИСТРАТОР
»
Исправлена ошибка «Ограничение памяти PHP ниже рекомендуемого значения» в ownCloud 10.
Исправлена ошибка «Ограничение памяти 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 или не перезапустили нужную службу.
php -r 'echo ini_get("memory_limit");'показывает предполагаемое значение
Отредактируйте php.iniтакже параметры, специфичные для командной строки.
Память хоста
Достаточно оперативной памяти; минимальное или полное отсутствие постоянного давления подкачки.
Не стоит слепо увеличивать лимиты PHP. Пересмотрите количество рабочих процессов PHP или размер хоста.
Журналы
Ошибок «Исчерпан допустимый объем памяти» не повторялось.
Прежде чем снова повышать лимит, определите задачу, потребляющую больше всего памяти.
1. Подтвердите предупреждение и значение, которое видит ownCloud.
Начните с значения, видимого самому ownCloud. Ограничение на размер среды выполнения веб-приложения в 128 МБ или 256 МБ ниже значения в 512 МБ, используемого в рекомендуемой конфигурации Docker от ownCloud.
Откройте настройки администрирования ownCloud и обратите внимание на предупреждение об ограничении памяти. Прежде чем что-либо менять, запишите версию ownCloud, версию PHP, тип веб-сервера и текущий лимит памяти. Это даст вам базовые данные и поможет избежать изменения неправильной установки PHP в системах с несколькими версиями PHP.
В текущей документации ownCloud для версии 10.16 указано, что требования к серверу сильно зависят от количества пользователей, файлов и активности. В настройках Docker OWNCLOUD_MEMORY_LIMIT=512Mрекомендуется сохранять эти значения по умолчанию. Таким образом, 512 МБ — это разумный базовый показатель для устранения предупреждения, но не гарантия того, что каждая рабочая нагрузка поместится в 512 МБ.
Это полезно для occзаданий cron, но не является доказательством того, что именно используется в веб-запросе. ownCloud явно указывает отдельные пути конфигурации, такие как:
Если в командной строке отображается 512 МБ, а страница администрирования по-прежнему выдает ошибку, это явное свидетельство того, что веб-сервер загружает другой файл php.ini.
См. примечания ownCloud по настройке PHP , в которых особо предупреждается о том, что настройки PHP, возможно, потребуется изменить более чем в одном INI-файле.
Сравните среду выполнения 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 МБ.
Для настройки 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 и, при необходимости, веб-сервер:
Для 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.
При использовании модуля 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 вместо редактирования файлов внутри контейнера.
Для официального контейнера 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. Перезапустите нужную службу и проверьте ее работу в той же среде выполнения.
Исправление считается завершенным только тогда, когда среда выполнения веб-приложений сообщает о наличии 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 МБ, проверьте объем оперативной памяти хоста.
После повышения лимита на один запрос проверьте общий объем системной памяти и поведение 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 МБ во время конкретной операции, переключитесь с «увеличения числа» на диагностику рабочей нагрузки: проверьте команду, вызвавшую сбой, приложения, журналы, параллелизм и физическую оперативную память. Более высокий лимит может быть уместен, но только если рабочая нагрузка это оправдывает и сервер может безопасно его поддерживать.