0

サーバーに問題があります。これは CentOS RedHat Linux サーバーであり、Ruby/Sinatra ベースのダッシュボード「Dashing」を実行します。

MySQL データベース「SHOW PROCESSLIST;」で定義されているアクティブな接続を閉じようとしています。

Example.rb ファイル

require 'mysql2'

SCHEDULER.every '10s'do

db = Mysql.new('host_name', 'database_name', 'password', 'table')

mysql1 = "SELECT `VAR` from `TABLE` ORDER BY `VAR` DESC LIMIT 1"
result1 = db.query(mysql1)
result1.each do |row|
strrow1 = row[0]
$num1 = strrow1.to_i
end
...

db.close

LINK[0] = { label: 'LABEL', value: $num1}
...

send_event('LABEL FOR HTML', { items: LINK.values })
end

ただし、何度かクリックを行ったり来たりすると、データベースが接続を切断せずに維持することが明らかです。これにより、ブラウザーの速度が低下し、ページの読み込みが不可能になり、ログの出力が次のようになります。

"max_user_connections" reached

誰でもこれを修正する方法を考えることができますか?

4

1 に答える 1

0

DB/ファイル/ハンドルを begin/rescue/ensure ブロックに配置するのがベスト プラクティスです。何かが起こっている可能性がありますが、Rufus/Dashing はエラーについて黙っているだけです。なぜなら、彼らは例外をトラップして楽しい道を進んでいるからです。これにより、データベース接続が閉じられなくなります。あなたが抱えている症状は、同様の問題に起因している可能性がありますが、どちらにしても良い考えです.

SCHEDULER.every '10s'do
  begin
    db = Mysql.new('host_name', 'database_name', 'password', 'table')

    # .... stuff ....
  rescue
    # what happens if an error happens? log it, toss it, ignore it?
  ensure
    db.close
  end

  # ... more stuff if you want ...
end
于 2014-09-18T13:43:00.953 に答える