質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

1回答

1140閲覧

node.jsのmysql2でToo many connectionsが出る

nebi

総合スコア14

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2018/02/01 14:32

mysql2(https://github.com/sidorares/node-mysql2)を使っているのですが、
connectionが切断されず繋ぎっぱなしになってしまい、しばらく動かしているとToo many connectionsエラーが返ってきます。
ドキュメントではend()を呼んで開放してるようなのですが、自分の環境では開放されてないように思います。
node.jsは始めたばかりでどこが悪いのか解りませんでした・・・。

コード:

a.js

javascript

1const search = require('./b') 2const search_api = async (limit,title,url) => { 3 const conn = mysql.createPool({ 4 connectionLimit: 3, 5 host: process.env.ND_DB_HOST, 6 user: process.env.ND_DB_USER, 7 password: process.env.ND_DB_PASS, 8 database: process.env.ND_DB_NAME 9 }) 10 11 const r = await search.sites(limit, conn) 12 await conn.end() 13 return r 14} 15 16const root = { 17 search_sites: async({limit, title, url}) => await search_api(limit, title, url), 18} 19 20router.use('/', graphqlHTTP({ 21 schema: schema, 22 rootValue: root, 23 graphiql: true, 24}))

b.js

javascript

1async function sites(limit, conn) { 2 limit > 1000 ? limit = 1000 : limit 3 const [r, f] = await c.query(`select title,url,id from site_lists where deleted_at is NULL limit ${limit}`) 4 return r 5}

確認方法はこんな感じです

sudo mysql >show status like 'Threads_connected'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 1 | +-------------------+-------+ > quit (node a.js & で起動しクエリを実行してみる) sudo mysql >show status like 'Threads_connected'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 2 | <- conn.end()が実行されたら1のままでは?と思ってる +-------------------+-------+

環境

node 8.9.4
mysql2 1.5.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2018/02/02 00:36

念のためですが、show processlist; で詳細をみて、残っているのは node.js からのアクセスでしょうか?
guest

回答1

0

b.js のコード内 c は 引数に合わせて conn では?

[b.js] const [r, f] = await c.query(/* omitte */);

ここで Reference Error を起こして、実行が中断され、await conn.end() も実行されていない気がします。

投稿2019/11/12 10:27

AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問