Назад | Перейти на главную страницу

PHP не может выделить память

По дороге в офис сегодня утром все веб-сайты на нашем общем VPS начали выдавать одну и ту же ошибку (несколько раз, а не типичную ошибку memory_limit, которая является фатальной):

Warning: Unknown: Unable to allocate memory for pool. in Unknown on line 0

Общий сервер - это 64-битный контейнер OpenVZ, на котором работает cPanel. На хосте всего ~ 6 VPS - это самый большой, всего 4 ГБ. Сам хост имеет 24 ГБ оперативной памяти. Как показывают графики ниже, использование памяти на хосте и VPS довольно низкое. Использование процессора / диска / хоста кажется нормальным. RlimitMem был установлен на 583653034, но использование памяти примерно такое же, как обычно.

Apache 2.2, PHP 5.2 (mod_php)

Перезапуск Apache на данный момент решил проблему. Однако я бы хотел, чтобы это не повторилось, и я не уверен, что ограничивало память. RlimitMem был установлен на 583653034, но использование памяти примерно такое же, как обычно. Кажется, памяти много: что вызвало эту ошибку?

Использование памяти VPS

Использование памяти хоста

Информация APC

 apc.ttl=0
 apc.shm_size=0
 apc.mmap_file_mask=(blank)

1 сегмент (ы) размером 32,0 МБ (память mmap, блокировка мьютекса pthread)

Это определенно ошибка, которую вы получаете, когда у APC заканчивается память. Когда я (пере) строю серверы, я часто забываю увеличить это значение до 128 M (подходит для моего приложения), и это именно та ошибка, которую вы видите.

Есть ли количество ошибок в / proc / bc / resources?

Все счетчики отказов должны быть равны 0 или оставаться неизменными с момента последнего инцидента.

Тебе надо:

  1. Увеличьте лимит ресурсов с помощью vzct set <CTID> ... --save на ресурсах, у которых есть счетчики отказов (см. man vzctl в устанавливать раздел). Вы также можете изменить ограничения ресурсов прямо в /etc/vz/conf/. Наверное, во всех случаях нужно перезагружать контейнеры после увеличения лимитов.

    На всякий случай увеличьте настройки (как барьер, так и лимит) для проблемных ресурсов до x2 (в два раза) от максимального значения.

  2. Запишите текущее количество отказов и следите за ними, чтобы они больше не увеличивались.

Для получения дополнительной информации об управлении различными ресурсами вы можете использовать http://wiki.openvz.org/Resource_shortage в качестве отправной точки.

Не могли бы вы рассказать нам немного подробнее о том, как подписан хост? (например, сколько общей оперативной памяти вы выделили для виртуальных машин, сколько оперативной памяти для каждой из виртуальных машин на хосте) Я понимаю, что ваш самый большой составляет 4 ГБ, но если все остальные - 3 ГБ, а система подписана на 19 ГБ, это должно показать 5 ГБ свободной памяти для ОС хоста. Моя математика, предположения или что-то еще не соответствует приведенному выше графику памяти хоста (показывающему, что ОЗУ занято 94%).

Общие ограничения sysctl распределения памяти? Посмотрите shmmax и друзья в /etc/sysctl.conf.

Или вы используете 32-битный PHP и / или Apache в 64-битной ОС? Мы видели причудливое поведение: «Боже мой, у меня закончилась память, и я собираюсь заполнить своп даже при наличии 16 ГБ свободной физической памяти» из 32-разрядных приложений с высоким потреблением памяти в 64-разрядной версии Linux.