memory_limit в PHP: как увеличить лимит памяти
memory_limit — сколько памяти может занять один скрипт PHP. В Ubuntu для сайта стоит 128M. Если скрипту не хватает, PHP останавливает его с ошибкой Allowed memory size exhausted. Лимит поднимают в php.ini и перезапускают PHP-FPM.
Содержание 8
Что сделать прямо сейчас
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
- Откройте файл настроек PHP для сайта:
sudo nano /etc/php/8.3/fpm/php.ini. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Нажмите Ctrl+W, введите
memory_limitи нажмите Enter — курсор встанет на строку с этой настройкой. Если в начале строки стоит точка с запятой, удалите её: такая строка не действует. - Впишите новое значение:
memory_limit = 256M. 256M — пример: ставьте столько, сколько просит ваша программа. - Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
- Перезапустите PHP-FPM:
sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен. - Проверьте значение:
php-fpm8.3 -i | grep memory_limit.
В ответе последней команды должно быть memory_limit => 256M => 256M. Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.
Что значит memory_limit
- Лимит действует на один скрипт: каждый запрос к сайту получает свои 128M, а не делит их с другими.
- Если скрипт пытается взять больше, PHP его останавливает. В журнале появляется
Allowed memory size of 134217728 bytes exhausted— 134217728 байт это 128M. - Значение пишут с буквой:
256M— 256 мегабайт,1G— гигабайт. -1снимает лимит. Так стоит в PHP для командной строки, а для сайта так делать не стоит: скрипт с ошибкой займёт всю память сервера.
| Где | Значение в Ubuntu 24.04 | Файл |
|---|---|---|
| сайт (PHP-FPM) | 128M | /etc/php/8.3/fpm/php.ini |
команда php в окне SSH и cron | -1 — без лимита | /etc/php/8.3/cli/php.ini |
Сколько памяти займут все процессы
Сайт обслуживают несколько процессов PHP-FPM, и каждый может занять до memory_limit. В Ubuntu процессов не больше 5 — так задано в pm.max_children. Верхняя оценка памяти для скриптов — memory_limit, умноженный на pm.max_children: при 256M и 5 процессах это 1 280 МБ.
Сравните с памятью сервера: free -h, колонка available в строке Mem:. Если оценка близка к ней или больше, поднимайте memory_limit осторожно или уменьшите pm.max_children. Иначе в пиковый момент памяти не хватит, и система начнёт закрывать программы — Out of memory. Как посчитать процессы по реальному размеру — в разборе pm.max_children.
Только для одного сайта
Только для одного сайта — строкой php_admin_value[memory_limit] = 256M в пуле PHP-FPM или строкой memory_limit = 256M в файле .user.ini: как это сделать.
memory_limit можно поднять и в коде, функцией ini_set('memory_limit', '256M'): настройка меняется где угодно. Не сработает это, только если в пуле стоит php_admin_value[memory_limit] — тогда значение закреплено.
У WordPress есть своя настройка памяти в wp-config.php — разбор для WordPress.
Как проверить
ivan@myserver:~$ php-fpm8.3 -i | grep memory_limit
memory_limit => 128M => 128MПервое значение — для текущего запуска, второе — основное из файлов настроек. Команда видит php.ini, но не пул и не .user.ini. Значение, которое видит сайт, точнее всего показывает phpinfo() на странице сайта: оно учитывает и настройки пула PHP-FPM, и файл .user.ini.
Ошибки рядом
| Что видите | Что делать |
|---|---|
Allowed memory size of … bytes exhausted | поднимите лимит памяти |
| то же в WordPress | разбор для WordPress |
Out of memory: Killed process | памяти не хватило всему серверу |
server reached pm.max_children setting | все процессы PHP-FPM заняты |
Источники
- Справка PHP: настройки ядра — memory_limit -1 снимает лимит; post_max_size должен быть больше upload_max_filesize.
- Справка PHP: список настроек — значения по умолчанию и где можно менять каждую настройку: INI_ALL, INI_PERDIR или INI_SYSTEM.
- Файл php.ini-production из PHP 8.3.6 — значения для рабочих серверов: display_errors Off, log_errors On, max_execution_time 30, post_max_size 8M, upload_max_filesize 2M.
- Справка PHP: сокращения K, M и G — 1K — 1024 байта, 1M — 1 048 576 байт; дробные значения вроде 0.5M не работают.
- Исходный код PHP 8.3.6: fpm_php.c — php_value задаёт значение для пула, php_admin_value вдобавок запрещает менять его в .user.ini и ini_set().
- Образец www.conf из PHP 8.3.6 — pm = dynamic, pm.max_children = 5, pm.start_servers = 2, pm.min_spare_servers = 1, pm.max_spare_servers = 3.
Сверено 14 октября 2026 года.
Что почитать дальше
- Настройки PHPглавные настройки и где их задают.
- Процессы PHP-FPMpm, pm.max_children и память.
- Где находится php.iniкакой файл править для сайта.