в компании, где я начал работать 1 июля, я унаследовал, среди прочего, веб-сервер, на котором запущен стек MySQL / Apache, на котором работает веб-сайт, построенный на Symfony.
Сервер работает под управлением openSuSE 12.1 и оснащен процессором Intel Xeon 3470 с оперативной памятью 12 ГБ. За исключением запуска веб-сайта, серверу нечего делать.
Мы наблюдаем серьезные всплески нагрузки на серверы, которые стали особенно заметными за последние пару недель. В это время нагрузка может доходить до 40-60 (иногда даже выше). Когда это происходит в нерабочее время, я вижу, что сервер не падает как таковой, хотя браузеры не могут получить доступ к сайту, и примерно через 30 минут сервер возвращается к своей нормальной загрузке. Когда это происходит в рабочее время, я вручную выключаю apache и MySQL, позволяю серверу немного успокоиться, а затем запускаю все заново.
В моих журналах доступа и журналах запросов я не вижу ничего особенного. У меня нет причин подозревать DOS, и я вижу, что запросы, выполнение которых иногда занимает минуту или больше во время этих пиковых нагрузок, выполняются вполне нормально, когда я звоню им на моем локальном сервере MySQL или когда они выполняются веб-сайтом под «нормальные» обстоятельства.
Короче говоря, из того, что я собрал до сих пор, проблема заключается в том, что иногда сервер начинает порождать большое количество процессов Apache вместе с большим количеством соединений MySQL. Большинство подключений и процессов, похоже, не так сильно влияют на процессор, но они заполняют оперативную память.
Я прочитал свой путь в сети и, в частности, кажется, что mysql-мудрые max_connections и wait_timeout, а также, возможно, max_allowed_packet и Apache-мудрый ServerLimit, MaxClients. Я не знаю, есть ли тайм-аут для простаивающих процессов apache, но я могу представить, что это тоже поможет.
По поводу max_allowed_packet ... это установлено на 209715200 (200 МБ). Это кажется довольно высоким, или, по крайней мере, это объясняет, что при 40+ открытых соединениях у меня заканчивается память (по крайней мере, я понял, что MySQL выделяет эти 200 МБ на каждое соединение, независимо от того, спит оно или нет.
Общая проблема, с которой я сталкиваюсь, заключается в том, что я не самый большой герой, когда дело доходит до настройки сервера: в основном, я очень обеспокоен тем, что любое изменение параметров конфигурации, упомянутых выше, может убить выполнение запросов или запросов или вызвать какой-либо хаос в работа сайта.
Хорошо, это был не конкретный вопрос, а скорее описание проблемы. Тем не менее, любой совет или помощь приветствуются, так как я особо не продвигаюсь ...
Ура, Константин