Cannot allocate memory Bitrix
Довольно часто при установке 1С-Битрикс: Веб-окружение вылезает либо 502 Bad Gateway, либо пишется, что в соединении отказано. Разумеется, если Вы создали сайты через меню и правильно прописали DNS.
Причина кроется в неправильно сконфигурированных веб-серверах, которые установлены на сервере — это Nginx и Apache.
В случае, когда работает Nginx и не работает Apache, вы получаете ошибку 502, а когда не работает Nginx или даже оба сразу — Вы наблюдаете connection refused.
Залезаем на сервер (у меня стоит ОС CentOS, у владельцев debian-based папка с apache называется apache2), смотрим файлы логов. Находятся они по адресу /var/log/httpd/ для Apache и /var/log/nginx/ для Nginx
Смотрим файл с названием error.log
И тот, и другой выдают одну и ту же ошибку: cannot allocate memory ровно столько раз, сколько я пытался запустить эти сервисы командами
service httpd startи
service nginx start.
Быстрое решение проблемы
mmap — это POSIX средство для разделения совместных ресурсов. Cannot allocate memory означает, что невозможно выделить заданное программами количество памяти ввиду отсутствия железно свободной памяти, которая занята процессами системы, разделённой областью и самими службами.
Иными словами, нашей оперативки не хватает для того, чтобы нормально работали эти две службы, так как много просят.
Итак, для тех, кто любит быстрые решения:
Проблема заключается в двух модулях: OPCache и push_stream, а также необходимо будет поднастроить количество запускаемых серверов Apache
Настоятельно рекомендую сначала запустить nginx, так как легко отследить результат — появляется 502я ошибка при попытке зайти на сайт вместо отказа от соединения.
Настройка Nginx
Заходим в файл /etc/nginx/bx/conf/im_settings.conf
Там находим строку
push_stream_shared_memory_size ------ <некое число>M
Уменьшаем в несколько раз это число, сохраняем результат
Пробуем запустить nginx командой
service nginx startи последующей за ней
service nginx statusесли кажется, что всё ОК.
Если не запускается — пробуем ещё уменьшить число.
В моём случае число нужно было заменить на 16. Для кого-то это число может быть 64, а для кого-то — 4
В конечном итоге работаем на результат =)
Настройка Apache
Теперь займёмся Apache.
Вводим команду
nproc
Она показывает, сколько ядер содержится у нас в процессоре. Это число равно числу клиентов Апача, которых нам нужно будет оставить.
На моём тестовом сервере всего одно ядро.
Заходим в файл /etc/httpd/bx/conf/prefork.conf Ставим StartServers равным нашему количеству ядер.
Остальные настройки можно уменьшить примерно в той степени, как и startservers.
Далее заходим в файл /etc/php.d/opcache.ini
Там находим строку
opcache.memory_consumption = <некое число>M
В моём случае число 124 (откуда такое «ровное» число — чёрт его знает) нужно было заменить на 16. Опять же, для кого-то этого будет недостаточно и необходимо будет уменьшить больше.
В конечном итоге, после метода проб и ошибок, у Вас должна сработать команда service httpd start и отобразиться волшебное
httpd (pid ####) is running
После запуска обеих служб вы получите работающую страницу
То, что делать необязательно
Теперь можем закинуть bitrix_server_test.php в /home/bitrix/www/ и проверить, на чём свет стоит.
НАПОМИНАЮ! (об этом подробнее говорилось в статье Виктора Тарана), что в этой папке должна быть заглушка индексной страницы и никакого рабочего сайта, так как весь мусор собирается именно сюда.
Запускаем файл — ваш_ip/bitrix_server_test.php и смотрим, насколько хорошо всё устроено.
А для того, чтобы разобраться подробнее, что за файлы мы трогали и что это за модули — будет написана пара статей в обозримом будущем.
Оставить комментарий
Комментарии (3)