Встретился с аномальным поведением NodeJS и MySQL. Вопрос очень специфический, буду рад любым догадкам.
В общих словах структура работы следующая. Скрипт сервера на NodeJS подключается к MemcacheQ, читает очередь и если там что то появляется, выполняет запрос на выборку в MySQL + несколько запросов на добавление информации в таблицу лога.
Примерно два раза в месяц случается следующее. В какой то момент перестает выполняться код обработки информации запроса.
my.query(select_query, function(error, result, fields) {
// код обработки информации, полученной из запроса
});
Делал вывод console.log(my) перед запросом и сравнивал, штатную и проблемную ситуацию. Разница была в том, что появлялось значение "Queue, Queue, ..., Queue" в одном из параметров. Сейчас не скажу уже точно, не сохранился лог. Буду ставить еще раз, т.к. вопрос оставлялся в связи с расставленными приоритетами.
Создание подключения: var my = require(script_path+'/node_modules/mysql2').createConnection({user: dbuser, password: dbpass, database: dbname, host: dbhost}); Сначала был mysql просто, потом использовал mysql2. Изменение не принесло успехов.
Дальше включил обрабатку ошибок: my.on('error', function(err) {
if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually
console.log('Lost connection MySQL Database');
console.log('db error', err);
sighandle();
} else { // connnection idle timeout (the wait_timeout
console.log('Database disconnect. Another error');
console.log('db error', err);
sighandle();
}
});
Думал поймаю что-нибудь, но ничего не прилетело. Такое чувство что есть некий параметр, дойдя до которого забивается очередь и запросы не выполняются.
Причем на этом же сервере работает apache+PHP+MySQL который читает и пишет в эту БД. В момент, когда появляется нештатная ситуация, веб интерфейс (apache+PHP+MySQL) работает корректно.
По нагрузке, примерно в 1 секунду NodeJS скрипт читает из MemcacheQ порядка 20 раз. Таких скриптов запущено порядка 15-20. БД размером порядка 300Гб.
В свое время как разбирался с проблемой, делал на сервере обновление пакетов через emerge -NuavD world (сервер гентушный). Не помогло.
Пробовал обновлять nodejs с версии 4 сначала на 6ую, потом пропатчил файлы и смог обновится на 7.9. Пока на восьмую не переходил.
Еще есть момент, когда делалась архивация старой информации и выполнялось куча запросов на удаление и добавление информации (думаю 200-250 млн запросов) в этом месяце сбой произошел гараздо раньше, чем через 15 дней..
Все случилось именно после переезда на новый сервер. На старом все было норм. Старый: Intel® Xeon® E5-1650 v2, 128Gb DDR4, 2Tb SATA Новый: Intel® Xeon® E5-1650 v3, 256Gb DDR4, 480SSD DataCenter Ed Но в момент переезда все версии MySQL и nodejs были одинаковые. Существенное отличие в жестких.
Понимаю, что сложно однозначно дать ответ. Но может будут хоть какие-то предположения. Я сделал автоматический перезапуск, когда это случается. Но из-за особенностей системы простой все равно составляет пару минут. За эти пару минут прилетает 100-200 запросов. И доставляются неудобства пользователям.
Хочется вернуться к этому вопросу, может кто нибудь чего нибудь подскажет. Вывод console.log(my) поставил сейчас, но след. падение будет через примерно 10-12 дней..
Заранее спасибо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите, почему не получается записать(на python) в базу(mysql) В чем ошибка ?
Есть таблица с текстовым полем, содержащим ссылкиВ разных строках таблицы эти ссылки произвольной длины
Выполняем запрос: SELECT id, name, rank FROM table ORDER BY rank DESC, id DESC Мне нужно получить позицию в этой выдаче строки с фиксированным id (например id=50)Как это...
помогите решить проблемуНе знаю в какую сторону капать