ActiveRecord::ConnectionTimeoutError due to unrele

2019-08-31 06:22发布

I'm using Dashing-rails (which uses Rufus-scheduler) to send updates to a browser widget.

After 5 separate requests to the page from a browser, the site crashes due to: "ActiveRecord::ConnectionTimeoutError".

My hypothesis is that each browser equests triggers creating a rufus-scheduler thread. This thread sends out updates and the thread holds on to the ActiveRecord connection without letting it go, eventually causing a timeout.

However, I tried ensuring the schedule release the connection to the ActiveRecord pool to no avail.

Dashing.scheduler.every '10s', :allow_overlapping => false do
    ActiveRecord::Base.connection_pool.with_connection do
    Dashing.send_event('past_hour',   { value: Device.sightings_past_hour })

    d = Device.where("company != ''").last
    company = d.company !="" ? d.company : "Device Manufacturer Not Found"
    Dashing.send_event('last_MAC', { text: "#{company}",
                                 moreinfo: "MAC Address: #{d.macaddress}"})
    Dashing.send_event('macaddresses',   { current: Device.total_Count })
top_manufacturers=Device.manufacturers_dashboard
    Dashing.send_event('manufacturers', {items: top_manufacturers})
    Dashing.send_event('past_day',   { current: Device.sightings_past_day })
end
    ActiveRecord::Base.connection_pool.release_connection
end

Is there a way to see what processes are running on each thread/ what's holding the ActiveRecord connection? Or prevent Dashing-rails from holding on to the ActiveRecord connection if this is the issue?

1条回答
闹够了就滚
2楼-- · 2019-08-31 06:50

Issue turns out to be related to Rails 4 live stream. https://github.com/rails/rails/issues/10989

Specifically Live streaming threads in Rails 4 are not getting closed.

查看更多
登录 后发表回答