一段时间以来,我的应用程序中一直存在内存泄漏。当前设置使用 Ruby 2.3.0、Rails 4.2 和 Puma Webserver puma 2.15.3 运行 Heroku 建议使用 Puma,但是大量调试让我相信它是真正的 Puma Webserver,这是所有麻烦的原因. 在调试期间,我删除了大部分 gem、代码等,但问题不断出现,RAM 内存增加,直到出现内存不足。这就是为什么我 99,999% 确定泄漏不是来自我的应用程序的原因。接下来我在我的开发系统上安装了“瘦”网络服务器,这也不是一个解决方案。然后我还将我的 ruby 版本升级到 2.3.0,泄漏立即得到解决,RAM 使用保持正常。
由于这种演变,我将我的生产系统升级到 Ruby 2.3.0(认为这只是一个 ruby 版本问题)但我仍然有内存泄漏。我现在看来它似乎是我的 Puma Webserver 和 Ruby 2.3.0 的组合......
你们中是否有人对 Puma 使用 Ruby 2.3.0 造成内存泄漏有任何经验。
在此先感谢,
更新: 我的 puma.rb
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
# Worker specific setup for Rails 4.1+
# See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
ActiveRecord::Base.establish_connection
end