2014-11-26 3 views
1

У меня есть приложение, работающее на Node.js и Экспресс с использованием базы данных MySQL . Водителем, который я использую, является node-orm2. Наши пользователи сообщают об ошибке «Too Many Connections», и я поставил диагноз проблемы, но я не знаю, как это исправить.Node и MySQL - Решение «Слишком много подключений» вопрос

В основном, что происходит, каждый раз, когда новый пользователь посещает сайт, драйвер создает для них новый поток/процесс. Я могу сделать запрос на db, и он появится там с Time0.

Если пользователь делает другое действие, которое требует базы данных, что же поток повторно используется и Time восходит к 0. Однако, если они этого не сделают, нить остается в живыхCommand от Sleep), а Time отходит. У db максимальный предел подключения 250 и тайм-аут 7200.

В основном, если более 250 человек используют сайт в течение 2 часов, мы видим ошибку «Слишком много подключений».

Я пробовал использовать пул связи , но это сделало проблему хуже. Каждый раз, когда новый пользователь использовал базу данных, он создал 10 потоков, и когда достигло 7200 секундного таймаута, поток, респаунд.

Какие у меня есть варианты?

Мой текущий метод запускает запланированное задание каждые полчаса, чтобы закрыть потоки, которые были открыты слишком долго, но есть ли лучший способ?

Я использую следующие настройки:

db.settings.set("properties.association_key", "{name}Id"); 
db.settings.set("instance.autoFetch", true); 
db.settings.set("instance.returnAllErrors", true); 
db.settings.set("instance.cache", false); 

ответ

1

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

Я знаю, что это не касается вашей корневой проблемы потоков, но, вероятно, разумно возвращать соединения в любом случае.

Смежные вопросы