По дороге в офис сегодня утром все веб-сайты на нашем общем 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
, но использование памяти примерно такое же, как обычно. Кажется, памяти много: что вызвало эту ошибку?
apc.ttl=0
apc.shm_size=0
apc.mmap_file_mask=(blank)
1 сегмент (ы) размером 32,0 МБ (память mmap, блокировка мьютекса pthread)
Это определенно ошибка, которую вы получаете, когда у APC заканчивается память. Когда я (пере) строю серверы, я часто забываю увеличить это значение до 128 M (подходит для моего приложения), и это именно та ошибка, которую вы видите.
Есть ли количество ошибок в / proc / bc / resources?
Все счетчики отказов должны быть равны 0 или оставаться неизменными с момента последнего инцидента.
Тебе надо:
Увеличьте лимит ресурсов с помощью vzct set <CTID> ... --save
на ресурсах, у которых есть счетчики отказов (см. man vzctl
в устанавливать раздел). Вы также можете изменить ограничения ресурсов прямо в /etc/vz/conf/
. Наверное, во всех случаях нужно перезагружать контейнеры после увеличения лимитов.
На всякий случай увеличьте настройки (как барьер, так и лимит) для проблемных ресурсов до x2 (в два раза) от максимального значения.
Запишите текущее количество отказов и следите за ними, чтобы они больше не увеличивались.
Для получения дополнительной информации об управлении различными ресурсами вы можете использовать http://wiki.openvz.org/Resource_shortage в качестве отправной точки.
Не могли бы вы рассказать нам немного подробнее о том, как подписан хост? (например, сколько общей оперативной памяти вы выделили для виртуальных машин, сколько оперативной памяти для каждой из виртуальных машин на хосте) Я понимаю, что ваш самый большой составляет 4 ГБ, но если все остальные - 3 ГБ, а система подписана на 19 ГБ, это должно показать 5 ГБ свободной памяти для ОС хоста. Моя математика, предположения или что-то еще не соответствует приведенному выше графику памяти хоста (показывающему, что ОЗУ занято 94%).
Общие ограничения sysctl распределения памяти? Посмотрите shmmax и друзья в /etc/sysctl.conf.
Или вы используете 32-битный PHP и / или Apache в 64-битной ОС? Мы видели причудливое поведение: «Боже мой, у меня закончилась память, и я собираюсь заполнить своп даже при наличии 16 ГБ свободной физической памяти» из 32-разрядных приложений с высоким потреблением памяти в 64-разрядной версии Linux.