我們有一個運行在heroku 2x dyno上的Rails應用程序。在Paper-trail日誌中,即使沒有對服務器的請求,應用程序的內存消耗也會保持線性增長,這會導致內存泄漏。Heroku上可能的內存泄露
Gemfile。
source 'https://rubygems.org
ruby '2.1.2'
gem 'aasm', '~> 3.2.0'
gem 'american_date'
gem 'attr_encrypted'
gem 'sass-rails', '~> 4.0.3'
gem 'bootstrap-sass', '~> 3.2.0.1'
gem 'bugsnag'
gem 'carrierwave', '~> 0.10.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'devise', '~> 3.2.0'
gem 'fog', '~> 1.22.0'
gem 'foreigner', '~> 1.6.1'
gem 'hstore_accessor'
gem 'jbuilder', '~> 2.0'
gem 'jquery-rails'
gem 'jquery-validation-rails', '~> 1.12.0'
gem 'omniauth-google-oauth2', '~> 0.2.0'
gem 'pg', '~> 0.17.0'
gem 'pundit', '~> 0.3.0'
gem 'rails', '4.1.4'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'simple_form', '~> 3.0.0'
gem 'spring', group: :development
gem 'therubyracer', platforms: :ruby
gem 'turbolinks'
gem 'uglifier', '>= 1.3.0'
gem 'unicorn'
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
gem 'stripe', :git => 'https://github.com/stripe/stripe-ruby'
gem 'feature'
gem 'finance'
gem 'cocoon'
gem 'accountingjs-rails'
group :development, :test do
gem 'pry-byebug', '~> 1.3.0'
gem 'pry-rails', '~> 0.3.0'
end
group :development do
gem 'thin'
gem 'rack-mini-profiler'
gem 'rails_best_practices'
gem 'rubocop'
gem 'spring-commands-rspec'
end
group :test do
gem 'capybara'
gem 'codeclimate-test-reporter'
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'shoulda-matchers', require: false
end
group :production do
gem 'skylight'
end
gem 'newrelic_rpm' #reccommended to load as late as possible
gem 'smarter_csv'
新的遺蹟圖顯示內存使用量的增加。
我們試圖降級紅寶石版本爲2.0,使用了增量下降,但少循序漸進。
有什麼方法可以找到問題是否與我們的代碼?找到根本原因的可能方法有哪些?
**編輯:* *(配置/ unicorn.rb)
worker_processes Integer(ENV['WEB_CONCURRENCY'] || 3)
timeout 15
preload_app true
before_fork do |_server, _worker|
Signal.trap 'TERM' do
puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
Process.kill 'QUIT', Process.pid
end
defined?(ActiveRecord::Base) &&
ActiveRecord::Base.connection.disconnect!
end
after_fork do |_server, _worker|
Signal.trap 'TERM' do
puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
end
defined?(ActiveRecord::Base) &&
ActiveRecord::Base.establish_connection
end
你正在運行多少個麒麟工人?如果你減少工人數量,問題是否會發生?我問,因爲當我們試圖運行兩名以上的工人時,我們看到了與彪馬類似的事情。 – tagCincy
@tagCincy我認爲,heroku設立了獨角獸工作者。在我們的配置文件中,它表示'worker_processes整數(ENV ['WEB_CONCURRENCY'] || 3)'。 – gmuraleekrishna
實際上,該行表示,除非您設置了WEB_CONCURRENCY配置,否則它是3個工人的默認值。嘗試使用'heroku config:set WEB_CONCURRENCY = 2'設置配置。 – tagCincy