Тестирую сайт под нагрузкой: запускаю десяток параллельных процессов, которые обращаются к разным страницам сайта. Еще десяток процессов обращаются к API сайтов партнеров и записывают полученные данные в локальную базу (несколько Кб раз в секунду каждый). Отслеживаю состояние через список процессов phpmyadmin и смотрю загрузку железа через top. В какой-то момент в phpmyadmin начинает увеличиваться количество строк со статусом sleep, доходит до 10-15 и пседоюзеры начинают получать Database connection error (2): Could not connect to MySQL вместо страниц сайта. Ошибка длится несколько секунд и все нормализуется. При этом загрузка ЦП не превышает 18%, свободно 4-6Г оперативки. Выделенный сервер: Apache 2.2.22 (Debian) / MySQL 5.5.38 Понимаю, что что-то в настройках напутано - подскажите куда рыть, пжлста. P.S. Гуглил. Отличие моей ситуации от повсеместной в том, что у меня ошибка длится секунды, а без искусственной нагрузки все сайты работают нормально (естественная нагрузка 5-10 одновременных пользователя).
Re: Кратковременное появление Database connection error (2). Ты устроил себе DDOS и спрашивешь, почему у тебя сервак ведет себя странно, как будто под DDOS'ом?
Re: Кратковременное появление Database connection error (2). Ну... разве 5-10 одновременно запрашиваемых страниц это DDOS... Думаю, что это очень даже невысокая нагрузка для сайтов. В общем-то это подтверждается загрузкой железа. Скорее всего есть очень банальное решение, но я его не знаю )) max_connections = 100. Насколько я в курсе, при возникновении проблем с лимитами возникает другая ошибка..
Re: Кратковременное появление Database connection error (2). 5-10 за какой интервал? За сотую долю секунды? В секунду сколько вы запросов шлете? Такое чувство, что сервер под нагрузкой сначала мягко отрабатывает очередь запросов, уводя их в sleep, а потом, когда очередь переполняется, начинаются банальные отказы. У многих систем есть подобные механизмы борьбы. "Загрузка процессора", к слову, тоже нифига не показатель. Раз на то пошло, это, на деле не "загрузка", не потраченные мощности, а то, сколько времени процессора зарезервировано планировщиком в данный момент. Приложение может уйти в своп при минимальной нагрузке на процессор, например.
Re: Кратковременное появление Database connection error (2). страница в нормальном режиме генерится за 300-400мс. каждый процесс получает страницу, сразу же запрашивает следующую. Получается что в каждый момент времени генерится 10 страниц. Понятно что что-то переполняется. Вопрос что. Сижу сейчас смотрю в iotop. Максимальная нагрузка на запись 7М/c. Вроде бы это мелочи для SSD. Еще раз повторюсь: в момент, когда возникает ошибка, наблюдаемые параметры таковы: загрузка ЦП 17% Свободно памяти 5Г (до свопа далеко) Загрузка SSD на запись 7М/c
Re: Кратковременное появление Database connection error (2). https://dev.mysql.com/doc/refman/5.5/en/server-system-varia ... onnections http://stackoverflow.com/questions/22415675/how-to-increase ... etc-my-cnf
Re: Кратковременное появление Database connection error (2). Почти полсекунды? Тяжеловато, вкрай тяжеловато. Сколько запросов при этом в бд делается? И да, вы уверены, что следующий запрос приходит только после получения ответа сервера? Но всего на одном ядре из нескольких, верно?
Re: Кратковременное появление Database connection error (2). Ага. Добавлено спустя 7 минут 40 секунд: Re: Кратковременное появление Database connection error (2)... примерно 100 в среднем. В том, что запрос на страницу генерится только после получения предыдущей - уверен. не понял вопроса. 8 ядер. 17% загрузки - средняя. некоторые ядра загружены под завязку. ну как это обычно в top - то одно то другое. Добавлено спустя 26 минут 45 секунд: Re: Кратковременное появление Database connection error (2)... Господа, попробую перефразировать свой исходный вопрос: от чего может возникать Database connection error? 1) Из-за неправильных параметров типа пароля и тд. Не мой случай. Если не гружу сам, то работает с теми же настройками. 2) как мне уже дважды намекнули - из-за параметров типа max_connection. (поставил 300 - та же хрень. чтоб отсечь эту причину надо бы посмотреть максимальное количество одновременных подключений. Как это можно сделать? ) может еще есть какие-то критические параметры в настройках MySQL? Кто-нить сталкивался? 3) Может из-за ограниченной пропускной способности моего SSD-диска? Я смотрю в iotop. вроде сверхнагрузок не вижу. Но может если почаще посмотреть то и увидеть что-то можно будет. Как можно сделать лог загрузки дисковой подсистемы с хорошей дискретизацией (к примеру 100мс)? 4) есть еще какие-нить причины верхнего уровня?
Re: Кратковременное появление Database connection error (2). А может ты видишь ошибку, которую показывает фреймворк, а не БД ? "Database connection error (2)" это вроде бы говорит Joomla, а не MySQL. Надо добыть родное майсиквельное сообщение об ошибке. Добавлено спустя 13 минут 54 секунды: Re: Кратковременное появление Database connection error (2)... Еще есть параметр max_user_connections. http://dev.mysql.com/doc/refman/5.0/en/user-resources.html
Re: Кратковременное появление Database connection error (2). Опп-па. Не знал. спасибо. Гляну. Правда я вчера психанул и стал править в my.cnf подряд все параметры, какие показались подозрительными исходя из моего субъективного понимания процесса. После этого коврового причесывания и полного ребута сервера ошибка железно пропала даже под удвоенной нагрузкой. На днях верну исходное состояние и буду менять по шагам.
Re: Кратковременное появление Database connection error (2). Резюме для поисковиков. В моем случае все упиралось в max_connections. похоже, в какой-то момент я исправил этот параметр в конфиге, но не ребутнул сервер. ставлю 50 - однозначное проявление проблемы как в исходном посте. Ставлю 300 - держит нагрузку вплоть до 100% загрузки ЦП. С благодарностью к artoodetoo, eos12 ))