0

我的服务器有问题。它是一个 CentOS RedHat Linux 服务器并运行“Dashing”一个基于 Ruby/Sinatra 的仪表板。

我正在尝试关闭我的 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/File/handle 的最佳实践是放在 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 回答