drush cr - > Cannot allocate memory

1 февраля 2023 в 12:22
Аватар пользователя VasyOK VasyOK 0 13

Привествю специалистов по системному окружению!

Команда 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.

Смотрю сколько памяти:
free -m
Выдает

              total        used        free      shared  buff/cache   available
Mem:            984         820          61          62         102          12
Swap:             0           0           0

На сайте ограничение ОЗУ 1 ГБ.
Может еще где-то задано другое ограничения для запуска команд в консоли?

Комментарии

VasyOK wrote: Может еще где-то задано другое ограничения для запуска команд в консоли?

Скорее всего. Иногда по какой-то причине там стоит 32МБ. Набери в консоли php -i, посмотри, откуда конфиги тянутся.

1 февраля 2023 в 12:42

Там много чего выводится
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ГБ ОЗУ для Драша достаточно?

1 февраля 2023 в 13:16
# php --version
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. я перезагрузил сервер в панели, что хостинг пердоставляет - все заработало. Но насколько мои действия верны я не знаю. Не знаю также хватает ли драшу ОЗУ.

1 февраля 2023 в 13:39

Хватает пока... Smile После перезагрузки свободной памяти больше, и отработало. Потом всё вернётся к ошибке, если ничего не менять в настройках на сервере, чтобы изменить выделение памяти в других сервисах.

1 февраля 2023 в 16:54

Эта ошибка НЕ связана с ограничением memory_limit d php, вообще никак.
Это ошибка нехватки памяти на сервере в принципе. Т.е. просто нечего физически выделять.

Ошибка при достижении лимита выделения в php вот такая:
Fatal error: Allowed memory size of XXX bytes exhausted

1 февраля 2023 в 16:52

Не насколько. Надо либо перенастроить сервер так, чтобы было достаточно свободной памяти, уменьшив её выделение где-нибудь в других местах, либо перейти на тариф где будет больше памяти.

2 февраля 2023 в 12:21

А как? И как определить, что памяти мало? Я как бы в этот сайт лезу раз в месяц перезагрузка во время drush cr поправляет ситуацию. Не то чтобы лишних 2 чебурека жалко за сервер, но там явно не Амазон.

2 февраля 2023 в 13:29

Тогда своп действительно может быть актуален.
Как, если кратко, то:

  • Создать на диске файл нужного размера, с помощью fallocate например.
  • Сделать на него mkswap
  • Подключить в fstab.

Подробности в документации, которую крайне полезно в таких случаях читать.
Определить что мало free, top, нагляднее какой-нибудь htop.

7 февраля 2023 в 18:50