plans node license hobby exceeded dynos ruby-on-rails ruby-on-rails-3 memory heroku memory-management

ruby-on-rails - license - memory quota exceeded heroku node



Heroku Error R14(Se excedió la cuota de memoria): ¿Cómo resuelvo esto? (7)

Además, la configuración de heroku de WEB_CONCURRENCY puede causar esto. Por ejemplo, tengo una aplicación que ejecuta 2 1x dynos. Si uso sensible_defaults (otra configuración de heroku), predetermina WEB_CONCURRENCY a 2 (basado en mis dynos). Esto causa una tonelada de errores R14 en mis registros. Si desactivo sens_defaults y establezco WEB_CONCURRENCY = 1 ... el problema desaparece.

Si no configuras WEB_CONCURRENCY, y no usas sensible_defaults, y sigues el servidor (estoy usando Puma) configurado a través de heroku docs ... es probable que tengas una línea en puma.rb que se vea así:

workers Integer(ENV[''WEB_CONCURRENCY''] || 3)

Si ese es el caso, entonces WEB_CONCURRENCY no está configurado ... por lo que será 3, que está usando aún más memoria.

En consola:

// revisa la configuración de configuración existente.

configuración heroku

// IF sensible_defaults está habilitado.

configuración heroku: set sensible_defaults = deshabilitado

// establecer WEB_CONCURRENCY

configuración heroku: establecer WEB_CONCURRENCY = 1

// monitorear registros para errores R14.

Tengo una aplicación Rails 3.1 en Heroku. Estoy viendo muchos de estos errores:

Error R14 (se excedió la cuota de memoria)

Normalmente, la entrada de registro anterior muestra:

Proceso ejecutando mem = 522M (102.1%)

Esto varía un poco pero nunca por mucho y puede ocurrir después de casi cualquier solicitud de URL, por lo que no está relacionado con una acción de controlador específico hasta donde yo sé.

Este es un bloque clásico de entradas de registro:

2012-01-16T02:35:57+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=55ms status=401 bytes=27 2012-01-16T02:35:58+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=155ms status=200 bytes=1 2012-01-16T02:36:02+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=13ms status=401 bytes=27 2012-01-16T02:36:02+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=147ms status=200 bytes=1 2012-01-16T02:36:09+00:00 heroku[router]: POST prizequiz.herokuapp.com/mobile_users dyno=web.1 queue=0 wait=0ms service=87ms status=201 bytes=624 2012-01-16T02:36:11+00:00 heroku[router]: GET prizequiz.herokuapp.com/quizzes/1/questions dyno=web.1 queue=0 wait=0ms service=5ms status=401 bytes=27 2012-01-16T02:36:11+00:00 heroku[router]: GET prizequiz.herokuapp.com/quizzes/1/questions dyno=web.1 queue=0 wait=0ms service=290ms status=200 bytes=81412 2012-01-16T02:36:15+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=10ms status=401 bytes=27 2012-01-16T02:36:16+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=67ms status=200 bytes=1 2012-01-16T02:36:33+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=10ms status=401 bytes=27 2012-01-16T02:36:33+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=132ms status=201 bytes=230 2012-01-16T02:36:55+00:00 heroku[web.1]: Process running mem=522M(102.1%) 2012-01-16T02:36:55+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-16T02:37:17+00:00 app[web.1]: 2012-01-16T02:37:17+00:00 app[web.1]: 2012-01-16T02:37:17+00:00 app[web.1]: Started POST "/quizzes/1/scores" for 177.53.80.25 at 2012-01-16 02:37:17 +0000 2012-01-16T02:37:17+00:00 app[web.1]: cache: [POST /quizzes/1/scores] invalidate, pass 2012-01-16T02:37:17+00:00 app[web.1]: 2012-01-16T02:37:17+00:00 app[web.1]: 2012-01-16T02:37:17+00:00 app[web.1]: Started POST "/quizzes/1/scores" for 177.53.80.25 at 2012-01-16 02:37:17 +0000 2012-01-16T02:37:17+00:00 app[web.1]: cache: [POST /quizzes/1/scores] invalidate, pass 2012-01-16T02:37:17+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=44ms status=201 bytes=230 2012-01-16T02:37:17+00:00 heroku[web.1]: Process running mem=522M(102.1%) 2012-01-16T02:37:17+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-16T02:37:17+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=16ms status=401 bytes=27 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]: Started GET "/quizzes/1/scores/current_game" for 177.53.80.25 at 2012-01-16 02:37:20 +0000 2012-01-16T02:37:20+00:00 app[web.1]: cache: [GET /quizzes/1/scores/current_game] miss 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]: Started GET "/quizzes/1/scores/current_game" for 177.53.80.25 at 2012-01-16 02:37:20 +0000 2012-01-16T02:37:20+00:00 heroku[router]: GET prizequiz.herokuapp.com/quizzes/1/scores/current_game dyno=web.1 queue=0 wait=0ms service=8ms status=401 bytes=27 2012-01-16T02:37:20+00:00 app[web.1]: cache: [GET /quizzes/1/scores/current_game] miss 2012-01-16T02:37:20+00:00 heroku[router]: GET prizequiz.herokuapp.com/quizzes/1/scores/current_game dyno=web.1 queue=0 wait=0ms service=6ms status=401 bytes=27 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]: Started POST "/quizzes/1/scores" for 177.53.80.25 at 2012-01-16 02:37:20 +0000 2012-01-16T02:37:20+00:00 heroku[router]: POST prizequiz.herokuapp.com/quizzes/1/scores dyno=web.1 queue=0 wait=0ms service=33ms status=401 bytes=27 2012-01-16T02:37:20+00:00 app[web.1]: cache: [POST /quizzes/1/scores] invalidate, pass 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]: Started GET "/quizzes/1/scores/current_game" for 177.53.80.25 at 2012-01-16 02:37:20 +0000 2012-01-16T02:37:20+00:00 app[web.1]: 2012-01-16T02:37:20+00:00 app[web.1]:

Tengo New Relic instalado pero no he podido identificar nada de utilidad.

Con mucho gusto le brindaremos más información si es necesario. También tengo una solicitud de soporte pendiente en Heroku para esto, pero aún (2 días marcados como urgentes) no he tenido respuesta.

Agregar dynos web no hace diferencia.

ACTUALIZACIÓN , he agregado la gema oink y este es un resultado de muestra

2012-01-26T08:24:25+00:00 app[web.1]: 2012-01-26T08:24:25+00:00 app[web.1]: 2012-01-26T08:24:25+00:00 app[web.1]: Started PUT "/mobile_users/1" for 110.49.234.219 at 2012-01-26 08:24:25 +0000 2012-01-26T08:24:26+00:00 app[web.1]: Oink Action: mobile_users#update 2012-01-26T08:24:26+00:00 app[web.1]: Memory usage: 286276 | PID: 16 2012-01-26T08:24:26+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2 2012-01-26T08:24:26+00:00 app[web.1]: Oink Log Entry Complete 2012-01-26T08:24:26+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass 2012-01-26T08:24:26+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=460ms status=200 bytes=1 2012-01-26T08:24:38+00:00 heroku[web.1]: Process running mem=537M(104.9%) 2012-01-26T08:24:38+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:24:43+00:00 app[web.1]: 2012-01-26T08:24:43+00:00 app[web.1]: 2012-01-26T08:24:43+00:00 app[web.1]: Started PUT "/mobile_users/1" for 103.1.165.23 at 2012-01-26 08:24:43 +0000 2012-01-26T08:24:43+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=544ms status=401 bytes=27 2012-01-26T08:24:43+00:00 app[web.1]: Oink Action: mobile_users#update 2012-01-26T08:24:43+00:00 app[web.1]: Memory usage: 288876 | PID: 19 2012-01-26T08:24:43+00:00 app[web.1]: Instantiation Breakdown: Total: 0 2012-01-26T08:24:43+00:00 app[web.1]: Oink Log Entry Complete 2012-01-26T08:24:43+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass 2012-01-26T08:24:47+00:00 app[web.1]: 2012-01-26T08:24:47+00:00 app[web.1]: 2012-01-26T08:24:47+00:00 app[web.1]: Started PUT "/mobile_users/1" for 103.1.165.23 at 2012-01-26 08:24:47 +0000 2012-01-26T08:24:48+00:00 app[web.1]: Oink Action: mobile_users#update 2012-01-26T08:24:48+00:00 app[web.1]: Memory usage: 286412 | PID: 16 2012-01-26T08:24:48+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2 2012-01-26T08:24:48+00:00 app[web.1]: Oink Log Entry Complete 2012-01-26T08:24:48+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=432ms status=200 bytes=1 2012-01-26T08:24:48+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass 2012-01-26T08:24:59+00:00 heroku[web.1]: Process running mem=537M(104.9%) 2012-01-26T08:24:59+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:25:20+00:00 heroku[web.1]: Process running mem=537M(104.9%) 2012-01-26T08:25:20+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:25:41+00:00 heroku[web.1]: Process running mem=537M(104.9%) 2012-01-26T08:25:41+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:26:32+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=34ms status=401 bytes=27 2012-01-26T08:27:04+00:00 app[web.1]: 2012-01-26T08:27:04+00:00 app[web.1]: 2012-01-26T08:27:04+00:00 app[web.1]: Started PUT "/mobile_users/1" for 103.1.165.23 at 2012-01-26 08:27:04 +0000 2012-01-26T08:27:04+00:00 app[web.1]: Oink Action: mobile_users#update 2012-01-26T08:27:04+00:00 app[web.1]: Memory usage: 288876 | PID: 19 2012-01-26T08:27:04+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2 2012-01-26T08:27:04+00:00 app[web.1]: Oink Log Entry Complete 2012-01-26T08:27:04+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass 2012-01-26T08:27:04+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=337ms status=200 bytes=1 2012-01-26T08:27:05+00:00 heroku[web.1]: Process running mem=537M(104.9%) 2012-01-26T08:27:05+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:27:26+00:00 heroku[web.1]: Process running mem=537M(104.9%) 2012-01-26T08:27:26+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:27:48+00:00 heroku[web.1]: Process running mem=537M(104.9%) 2012-01-26T08:27:48+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:28:08+00:00 heroku[web.1]: Process running mem=537M(105.0%) 2012-01-26T08:28:08+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:28:29+00:00 heroku[web.1]: Process running mem=537M(105.0%) 2012-01-26T08:28:29+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:28:51+00:00 heroku[web.1]: Process running mem=537M(105.0%) 2012-01-26T08:28:51+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:29:08+00:00 app[web.1]: 2012-01-26T08:29:08+00:00 app[web.1]: 2012-01-26T08:29:08+00:00 app[web.1]: Started PUT "/mobile_users/1" for 85.26.234.218 at 2012-01-26 08:29:08 +0000 2012-01-26T08:29:08+00:00 app[web.1]: Oink Action: mobile_users#update 2012-01-26T08:29:08+00:00 app[web.1]: Memory usage: 382404 | PID: 13 2012-01-26T08:29:08+00:00 app[web.1]: Instantiation Breakdown: Total: 0 2012-01-26T08:29:08+00:00 app[web.1]: Oink Log Entry Complete 2012-01-26T08:29:08+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass 2012-01-26T08:29:08+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=86ms status=401 bytes=27 2012-01-26T08:29:09+00:00 app[web.1]: 2012-01-26T08:29:09+00:00 app[web.1]: 2012-01-26T08:29:09+00:00 app[web.1]: Started PUT "/mobile_users/1" for 85.26.234.218 at 2012-01-26 08:29:09 +0000 2012-01-26T08:29:09+00:00 app[web.1]: Oink Action: mobile_users#update 2012-01-26T08:29:09+00:00 app[web.1]: Memory usage: 382404 | PID: 13 2012-01-26T08:29:09+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2 2012-01-26T08:29:09+00:00 app[web.1]: Oink Log Entry Complete 2012-01-26T08:29:09+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass 2012-01-26T08:29:09+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=160ms status=200 bytes=1 2012-01-26T08:29:11+00:00 app[web.1]: 2012-01-26T08:29:11+00:00 app[web.1]: 2012-01-26T08:29:11+00:00 app[web.1]: Started PUT "/mobile_users/1" for 85.26.234.218 at 2012-01-26 08:29:11 +0000 2012-01-26T08:29:11+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=101ms status=401 bytes=27 2012-01-26T08:29:11+00:00 app[web.1]: Oink Action: mobile_users#update 2012-01-26T08:29:11+00:00 app[web.1]: Memory usage: 382404 | PID: 13 2012-01-26T08:29:11+00:00 app[web.1]: Instantiation Breakdown: Total: 0 2012-01-26T08:29:11+00:00 app[web.1]: Oink Log Entry Complete 2012-01-26T08:29:11+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass 2012-01-26T08:29:12+00:00 app[web.1]: 2012-01-26T08:29:12+00:00 app[web.1]: 2012-01-26T08:29:12+00:00 app[web.1]: Started PUT "/mobile_users/1" for 85.26.234.218 at 2012-01-26 08:29:12 +0000 2012-01-26T08:29:12+00:00 heroku[web.1]: Process running mem=537M(105.0%) 2012-01-26T08:29:12+00:00 heroku[web.1]: Error R14 (Memory quota exceeded) 2012-01-26T08:29:12+00:00 app[web.1]: Oink Action: mobile_users#update 2012-01-26T08:29:12+00:00 app[web.1]: Memory usage: 288876 | PID: 19 2012-01-26T08:29:12+00:00 app[web.1]: Instantiation Breakdown: Total: 2 | MobileUser: 2 2012-01-26T08:29:12+00:00 app[web.1]: Oink Log Entry Complete 2012-01-26T08:29:12+00:00 app[web.1]: cache: [PUT /mobile_users/1] invalidate, pass 2012-01-26T08:29:12+00:00 heroku[router]: PUT prizequiz.herokuapp.com/mobile_users/1 dyno=web.1 queue=0 wait=0ms service=169ms status=200 bytes=1 2012-01-26T08:29:33+00:00 heroku[web.1]: Process running mem=537M(105.0%) 2012-01-26T08:29:33+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)

No tengo idea de lo que eso prueba aparte de que parece que no estoy usando tanta memoria como Heroku piensa que estoy Uso de la memoria: 288876 vs Memorando de proceso = 537M (105.0%)


Busque el código con ''Model.all.each do |something|'' y reemplazar con Model.find_each do |something| . Esto ahorrará memoria al cargar trozos de su modelo en la memoria en lugar de cargar todo el modelo a la vez.

Además, busque oportunidades para usar in_groups_of o :limit para disminuir el número de objetos que se guardan en la memoria al mismo tiempo.

EDITAR: for_each -> find_each.


Estaba usando Mongoid y, en mi caso, era desde el ''mapa de identidad'' habilitado en un proceso de solicitud no web (por lo que el mapa de identidad nunca se borraba y seguía creciendo). Establecer Mongoid.identity_map_enabled = false en ese proceso resolvió el problema.


Heroku especifica un límite de RAM por dyno en su Política de uso aceptable .

Puede usar memprof , específicamente Memprof::Middleware , para ayudar a averiguar qué Memprof::Middleware toda la memoria en su aplicación durante las solicitudes. Esto solo es adecuado para su uso en un entorno que no sea de producción, ya que ralentizará su aplicación.

Es común que una aplicación de Rails esté asignando muchos objetos ActiveRecord, por lo que puede buscar los lugares donde está haciendo Model.find(:all).select{...} , o consultas similares que Model.find(:all).select{...} muchos registros del DB y luego procesarlos en Ruby. Sería mejor usar where limitar lo que se devuelve a la aplicación Rails utilizando SQL.


Para mí, reemplazar a RMagick con MiniMagick hizo el trabajo. Ambas gemas tienen las mismas funciones de cambio de tamaño y recorte (estoy usando carrierwave para cargas de imágenes)

  1. Actualización de Gemfile

    Retire la gem ''rmagick''

    y agrega la gem ''mini_magick''

    Ejecutar bundle

  2. Actualice los cargadores de carrierwave

    Reemplazar include CarrierWave::RMagick

    con include CarrierWave::MiniMagick

  3. Implementar a Heroku y eso es todo!

-

Finalmente no tengo errores R14 después de cada solicitud.


Tenía este problema ... para resolverlo usando find_in_batches.

Si alguien todavía tiene este error, pondré el código aquí. Como lleva mucho tiempo ejecutar, encontré una joya progress_bar que ayuda al usuario. lo dejaré aquí también porque creo que es obligatorio en casi todos los casos.

bar = ProgressBar.new( total ) Texto.find_in_batches(:batch_size => 100) do |textos| textos.each{| texto | ...do_stuff... } bar.increment! textos.size end

Barra de progreso: https://github.com/paul/progress_bar/issues


Tuve el mismo problema y me actualicé a sus 2x dynos como un espacio de parada mientras intentaba depurar con la gema oink. El cambio de configuración para duplicar los dinnos no funcionó después de un heroku restart ni los llevó a 0 ni a la copia de seguridad. Hacer un git push después de agregar la joya de oink hizo que la actualización funcione, y oink no muestra el mismo consumo que inicialmente mostraban los registros de heroku.