Решение проблемы с «засыпанием» сайтов на Mojolicious


Решение проблемы с «засыпанием» сайтов на Mojolicious

При большом количестве сайтов работающих на Mojolicious происходит эффект «засыпания» сайта.  Этот эффект проявляется когда к сайту долгое время не обращаются, например 8-10 часов. Почему такое происходит и как решили проблему с «засыпанием» сайтов на Mojolicious рассказывается в этой статье.

 

В чем состоит проблема с «засыпанием» сайта на  Mojolicious

При работе большого количества сайтов   Mojolicious через Nginx на сервере начали наблюдать    «падение» (прекращение работы) процессов hypnotoad или же наблюдали эффект длительного «просыпания» сайта,  когда после  простоя сайта 8-10часов или более, при попытке зайти на сайт  открытие страницы в браузере занимало длительное время (2-3 минуты). Иногда сайт вообще мог не открыться, показывая сообщение «Bad gateway». При этом после повторного захода на сайт он открывался и начинал работать, а иногда также продолжал выдавать сообщение об ошибке «502 Bad Gateway».

 

Причины  «засыпанием» сайта  на  Mojolicious

Основная причина оказалось в том, что процесс hypnotoad  который работает постоянно и по существу являются веб-сервером, постоянно держит соединение с сервером баз данных MySQL.

При этом, для каждого сайта запускалось по 10 процессов, которые обеспечивали быструю работу сайта при посещении пользователями страниц сайта.

 

Пример конфигурации сайта  sdep.ru.cms.conf

{

    hypnotoad => {

    listen   => ["http://127.0.0.1:3001"] ,

    workers  => 10,

    proxy    => 1

    }

};

 

В СУБД Mysql  количество одновременно работающих соединений ограничено и настраивается в файлу конфигурации my.conf

Параметр max_user_connections отвечает за количество одновременных соединений от имени одного пользователя.

Так как все скрипты на  Mojolicious работают под одним пользователем usermojo в MySQL то важен именно этот параметр.

В MySQL есть другой параметр max_connections но он указывает на количестов соединений всего.

 

Пример конфигурации  my.conf

SET GLOBAL max_user_connections = 500;

SET GLOBAL max_connections = 500;

 

Установили 500 соединений для одного пользователя и 500 соединений всего.

 

Уменьшение потребления ресурсов сервера

Кроме увеличения количества разрешенный соединений для пользователя уменьшили количество соединений сайтами на Mojo и уменьшили количество потребляемых ресурсов – ведь каждый процесс hypnotoad забирает часть оперативной памяти и процессорного времени.

 

Пример оптимизированной конфигурации

{

    hypnotoad => {

    listen   => ["http://127.0.0.1:3001"] ,

    workers  => 2,

    proxy    => 1

    }

};

 

Видно что вместо 10 работающих процессов оставили только 2 процесса которые работают.

 

Заключение

Увеличением количества соединений к субд MySQL для одного пользователя (max_user_connections) и уменьшением потребляемых ресурсов которые требовались всем работающим процессам  hypnotoad удалось высвободить ресурсы сервера и убрать эффект «засыпания» или падения процесса и увеличения количества сайтов работающих на связке Mojolicous + Nginx

Другой вариант – увеличение ресурсов сервера, то есть оперативной памяти, количества процессоров, жестких дисков – тоже возможный вариант но для дальнейшей оптимизации мы пошли другим путем – запустили сайты на Mojolicous в связке Mojolicous + Apache + Nginx

 

Читать 

Конфигурирование Apache для запуска  в продакшн Mojolicious

Mojolicious  framework – запуск в продакшн на Apache

Конфигурирование Apache для правильной работы Mojolicious

Решение проблемы с «засыпанием» сайтов на  Mojolicious

 

 


Есть дополнительная информация тел: (3012)277-200