J'ai reçu le (apparemment courant) Erreur R14 , je ne sais pas quand il a commencé mais j'ai remarqué après l'installation du module complémentaire Papertrail. J'ai également ajouté oink après avoir vu d'autres personnes le mentionner. J'ai essayé tout ce que d'autres ont essayé dans d'autres SO questions mais je n'arrive pas à trouver le problème/fuite de mémoire.
Error R14 (Memory quota exceeded)
heroku/web.1: Process running mem=587M(114.7%)
Quand je vois cela, pour résoudre ce problème temporairement, j'exécute heroku restart
Qui fonctionne pendant un certain temps mais je veux résoudre ce problème de façon permanente.
D'après ce que je peux voir dans Papertrail, l'application continue de charger la même page (page d'accueil) encore et encore (et ce n'est pas le trafic des utilisateurs):
app/web.1: Completed 200 OK in 436ms (Views: 45.5ms | ActiveRecord: 386.2ms)
app/web.1: May 25 18:14:52 5d2105e1-d799-4496-a2af-3785e78998db Rails[9]: Oink Action: static_pages#home
app/web.1: May 25 18:14:52 5d2105e1-d799-4496-a2af-3785e78998db Rails[9]: Memory usage: 378860 | PID: 19
app/web.1: May 25 18:14:52 5d2105e1-d799-4496-a2af-3785e78998db Rails[9]: Oink Log Entry Complete
heroku/web.1: source=web.1 dyno=heroku.25566769.9d9a3da0-db4c-4b51-bc53-b69be9e43cb7 sample#memory_total=209.86MB sample#memory_rss=209.83MB sample#memory_cache=0.02MB sample#memory_swap=0.00MB sample#memory_pgpgin=59278pages sample#memory_pgpgout=5555pages
et après 2 minutes:
heroku/web.1: source=web.1 dyno=heroku.25566769.9d9a3da0-db4c-4b51-bc53-b69be9e43cb7 sample#memory_total=293.73MB sample#memory_rss=291.94MB sample#memory_cache=0.02MB sample#memory_swap=1.77MB sample#memory_pgpgin=80890pages sample#memory_pgpgout=6147pages `
J'ai également activé heroku labs:enable log-runtime-metrics
À partir des instructions d'une autre question ici et de Heroku ici
J'ai également ajouté le module complémentaire New Relic et voici ce que je vois dans l'onglet Surveillance> Instances:
Pour les 7 derniers jours:
Pour les dernières 24 heures:
Je suis confus, comme vous pouvez le voir après le 5/24, l'utilisation de la mémoire a diminué et est restée depuis, mais dans les journaux, elle indique que la mémoire est utilisée mem=587M(114.7%)
et au cours des dernières 24 heures, une moyenne de 150 millions, donc Je ne comprends pas ce qui se passe. J'espère que quelqu'un pourra vous aider. Merci.
#Gemfile
source 'https://rubygems.org'
Ruby '2.1.1'
gem 'Rails', '4.1.1'
gem 'puma', '~> 2.8.2'
gem 'turbolinks', '~> 2.2.2'
gem 'pg', '~> 0.17.1'
gem 'rack-attack', '~> 4.0.1'
gem 'memcachier'
gem 'dalli', '~> 2.7.1'
gem 'oink'
gem 'fog', '~> 1.22.0'
gem 'activeadmin', github: 'gregbell/active_admin'
gem 'dynamic_sitemaps', '~> 2.0.0'
gem 'whenever', :require => false
gem 'cancancan', '~> 1.8.0'
gem 'mini_magick', '~> 3.7.0'
gem 'carrierwave', '~> 0.10.0'
gem 'devise', '~> 3.2.4'
gem 'rolify', '~> 3.4.0'
gem 'simple_form', '~> 3.0.2'
gem 'cocoon', '~> 1.2.6'
gem 'friendly_id', '~> 5.0.3'
gem 'nokogiri', '~> 1.6.2.1'
gem 'kaminari'
gem 'impressionist', '~> 1.5.1'
gem 'validate_url'
gem 'searchkick', '~> 0.7.5'
gem 'meta-tags', '~> 2.0.0'
gem 'newrelic_rpm'
group :assets do
gem 'sass-Rails', '~> 4.0.3'
gem 'bootstrap-sass', '~> 3.1.1.1'
gem 'uglifier', '~> 2.5.0'
gem 'coffee-Rails', '~> 4.0.1'
gem 'asset_sync'
#gem 'jquery-turbolinks'
gem 'jquery-Rails'
gem 'jbuilder', '~> 2.0.7'
end
group :production do
gem 'Rails_12factor'
end
C'était assez simple, en suivant les instructions ici . Et voici à quoi cela ressemble maintenant, ce qui semble bien, mais je pense que c'est parce que l'application a été redémarrée:
# after heroku restart
heroku/web.1: source=web.1 dyno=heroku.25566769.3770e52a-ddf3-485a-a88a-ac4fd54ab640 sample#memory_total=123.62MB
# after 4 minutes
heroku/web.1: source=web.1 dyno=heroku.25566769.3770e52a-ddf3-485a-a88a-ac4fd54ab640 sample#memory_total=276.48MB
Après cela, c'est l'utilisation moyenne de la mémoire par dynamomètre/instance pour les 6 dernières heures selon New Relic:
Et la sortie dans PaperTrain (et également essayé LogEntries) était la suivante:
app/web.1: May 26 19:54:08 21ae35ee-5656-4254-9f12-5dc6bb59efa1 Rails[6]: Memory usage: 426076 | PID: 6
app/web.1: May 26 19:54:08 21ae35ee-5656-4254-9f12-5dc6bb59efa1 Rails[6]: Oink Log Entry Complete
heroku/web.1: source=web.1 dyno=heroku.25566769.21ae35ee-5656-4254-9f12-5dc6bb59efa1 sample#load_avg_1m=0.00 sample#load_avg_5m=0.00 sample#load_avg_15m=0.00
heroku/web.1: source=web.1 dyno=heroku.25566769.21ae35ee-5656-4254-9f12-5dc6bb59efa1 sample#memory_total=431.99MB sample#memory_rss=406.85MB sample#memory_cache=0.10MB sample#memory_swap=25.04MB sample#memory_pgpgin=198612pages sample#memory_pgpgout=94432pages
J'ai vérifié les journaux, et après 1 heure, j'obtenais l'erreur R14 et maintenant elle a très peu augmenté, se maintenant presque à 432 Mo et je n'ai plus eu l'erreur. Cela semble donc avoir résolu le problème! Je mettrai à jour au fil du temps si cela change.
Si Papertrail pose problème, essayez un autre module complémentaire. J'utilise LogEntries sans grand problème. https://addons.heroku.com/#logging
Essayez également de réduire vos processus de travail Unicorn afin qu'il utilise une mémoire totale inférieure. Au lieu de la valeur par défaut de 3 (par boîte/dyno), essayez 2.
https://devcenter.heroku.com/articles/Rails-Unicorn#unicorn-worker-processes
Vous pouvez également exécuter un profileur de mémoire sur votre application:
http://timetobleed.com/memprof-a-Ruby-level-memory-profiler/
https://www.Ruby-toolbox.com/search?utf8=%E2%9C%93&q=profile
Digital Ocean a écrit n excellent article à ce sujet .
Killing Unicorns peut fonctionner dans certaines situations ... cependant certaines personnes peuvent avoir des préoccupations éthiques avec cette approche.
Si vous utilisez Rails 4 avec Ruby 2.1, je parie que le seul changement que vous devez faire est de rétrograder vers Ruby = 2,0 retour.
J'ai passé 2 jours à le comprendre et j'ai eu cette idée avec les suggestions du support Heroku. Je pense que c'est un bug ou quelque chose comme ça avec Ruby 2.1 ou Rails 4.
À l'époque, la rétrogradation fonctionnait comme une solution. Mais bon, ce n'est vraiment pas un moyen recommandé de résoudre les problèmes ... Certaines personnes disent mise à nivea à Ruby 2.2.0 avec Rails = 4,2 diminue considérablement la consommation de mémoire. Je voudrais essayer!
Ruby 2.1.1 avait un bug dans Garbage Collector bien décrit par Sam Saffron:
http://samsaffron.com/archive/2014/04/08/Ruby-2-1-garbage-collection-ready-for-production
Cela causait une sorte de fuite de mémoire. La solution consiste à mettre à niveau Ruby. --- versions prises en charge par Herok sont 2.1.7 et 2.2.3.
J'ai eu un problème similaire. J'utilise Ruby 2.3.1 et Rails 4.2.6, Heroku with Unicorn. Les deux variables de configuration suivantes n'étaient pas définies auparavant dans mon application. le terminal avec la commande suivante a résolu le problème pour moi.
heroku config:set sensible_defaults=disabled
heroku config:set WEB_CONCURRENCY=1