Привествю специалистов по системному окружению!
Команда drush cr выдает:
mmap() failed: [12] Cannot allocate memory
PHP Fatal error: Out of memory (allocated 27262976) (tried to allocate 307200 bytes) in /var/www/www-root/data/www/sitename.com/web/core/lib/Drupal/Core/Cache/DatabaseBackend.php on line 245
[warning] Drush command terminated abnormally.
PHP Fatal error: Out of memory (allocated 27262976) (tried to allocate 307200 bytes) in /var/www/www-root/data/www/sitename.com/web/core/lib/Drupal/Core/Cache/DatabaseBackend.php on line 245
[warning] Drush command terminated abnormally.
Смотрю сколько памяти:
free -m
Выдает
total used free shared buff/cache available
Mem: 984 820 61 62 102 12
Swap: 0 0 0
Mem: 984 820 61 62 102 12
Swap: 0 0 0
На сайте ограничение ОЗУ 1 ГБ.
Может еще где-то задано другое ограничения для запуска команд в консоли?
Комментарии
Скорее всего. Иногда по какой-то причине там стоит 32МБ. Набери в консоли
php -i
, посмотри, откуда конфиги тянутся.Там много чего выводится
Additional .ini files parsed => /etc/php/7.4/cli/conf.d/10-mysqlnd.ini,
/etc/php/7.4/cli/conf.d/10-opcache.ini,
Захожу сюда
/etc/php/7.4/cli/php.ini
тут:
memory_limit = -1
Значит нет ограничений? БД 700МБ весит. 1ГБ ОЗУ для Драша достаточно?
А ты уверен, что для cli именно версия 7.4 вызывается?
PHP 7.4.28 (cli) (built: Feb 17 2022 16:06:19) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.28, Copyright (c), by Zend Technologies
P.S. я перезагрузил сервер в панели, что хостинг пердоставляет - все заработало. Но насколько мои действия верны я не знаю. Не знаю также хватает ли драшу ОЗУ.
Хватает пока...
После перезагрузки свободной памяти больше, и отработало. Потом всё вернётся к ошибке, если ничего не менять в настройках на сервере, чтобы изменить выделение памяти в других сервисах.
Эта ошибка НЕ связана с ограничением memory_limit d php, вообще никак.
Это ошибка нехватки памяти на сервере в принципе. Т.е. просто нечего физически выделять.
Ошибка при достижении лимита выделения в php вот такая:
Fatal error: Allowed memory size of XXX bytes exhausted
т.е. это не оперативная память, а место на сервере?
Это оперативная память. Но это именно нехватка памяти, а не лимиты в настройках php.
Насколько разумно перезагружать сервер раз в сутки чтоб избежать подобного?
Не насколько. Надо либо перенастроить сервер так, чтобы было достаточно свободной памяти, уменьшив её выделение где-нибудь в других местах, либо перейти на тариф где будет больше памяти.
Можно ещё включить файл подкачки.
А как? И как определить, что памяти мало? Я как бы в этот сайт лезу раз в месяц перезагрузка во время drush cr поправляет ситуацию. Не то чтобы лишних 2 чебурека жалко за сервер, но там явно не Амазон.
Тогда своп действительно может быть актуален.
Как, если кратко, то:
Подробности в документации, которую крайне полезно в таких случаях читать.
Определить что мало free, top, нагляднее какой-нибудь htop.