Fallo al arrancar por falta de memoria del "out of memory killer"

Hola a todos,

Quiero actualizar mi Discourse con ./launcher rebuild app. Funcionó sin problemas durante aproximadamente un año. Lo actualizo cada 2-4 semanas si es necesario.

Estoy en Ubuntu 18.04.5 LTS

***@***:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:        18.04
Codename:       bionic

Hoy se detiene con este error:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 726 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
db6d1b1dd685de69942a3df05c9cbd622860faaa286b042635878519d5b69b7b
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

El primer error antes de ese mensaje fue:

<--- JS stacktrace --->

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: 0xa04200 node::Abort() [node]
 2: 0x94e4e9 node::FatalError(char const*, char const*) [node]
 3: 0xb7978e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
 4: 0xb79b07 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
 5: 0xd34395  [node]
 6: 0xd46c01 v8::internal::Heap::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
 7: 0xd0c472 v8::internal::Factory::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) [node]
 8: 0xd086c2 v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawArray(int, v8::internal::AllocationType) [node]
 9: 0xd08774 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithFiller(v8::internal::Handle<v8::internal::Map>, int, v8::internal::Handle<v8::internal::Oddball>, v8::internal::AllocationType) [node]
10: 0xf4ef4b v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::Allocate(v8::internal::Isolate*, int, v8::internal::AllocationType) [node]
11: 0xf4f0df v8::internal::OrderedHashTable<v8::internal::OrderedHashSet, 1>::Rehash(v8::internal::Isolate*, v8::internal::Handle<v8::internal::OrderedHashSet>, int) [node]
12: 0x103eb98 v8::internal::Runtime_SetGrow(int, unsigned long*, v8::internal::Isolate*) [node]
13: 0x1401219  [node]
Aborted (core dumped)
rake aborted!
Errno::ENOENT: No such file or directory @ rb_file_s_size - /var/www/discourse/public/assets/discourse/tests/test_helper-a9cbc4e1abdd1f2e9afced86d051cbd63c2e224dafe782533646a01592cc1f42.js
/var/www/discourse/lib/tasks/assets.rake:290:in `size'
/var/www/discourse/lib/tasks/assets.rake:290:in `block (4 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:181:in `block in concurrent?'
/var/www/discourse/lib/tasks/assets.rake:281:in `block (3 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:272:in `each'
/var/www/discourse/lib/tasks/assets.rake:272:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:181:in `concurrent?'
/var/www/discourse/lib/tasks/assets.rake:269:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
I, [2021-04-26T13:10:13.996101 #1]  INFO -- : Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

I, [2021-04-26T13:10:14.018697 #1]  INFO -- : Terminating async processes
I, [2021-04-26T13:10:14.020721 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 55
I, [2021-04-26T13:10:14.022854 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 172
172:signal-handler (1619442614) Received SIGTERM scheduling shutdown...
2021-04-26 13:10:14.023 UTC [55] LOG:  received fast shutdown request
2021-04-26 13:10:14.030 UTC [55] LOG:  aborting any active transactions
2021-04-26 13:10:14.043 UTC [55] LOG:  background worker "logical replication launcher" (PID 64) exited with exit code 1
2021-04-26 13:10:14.045 UTC [59] LOG:  shutting down
2021-04-26 13:10:14.073 UTC [55] LOG:  database system is shut down
172:M 26 Apr 2021 13:10:14.122 # User requested shutdown...
172:M 26 Apr 2021 13:10:14.123 * Saving the final RDB snapshot before exiting.
172:M 26 Apr 2021 13:10:14.270 * DB saved on disk
172:M 26 Apr 2021 13:10:14.271 # Redis is now ready to exit, bye bye...

Discourse no se ejecuta después de eso. Solo si reinicio el servidor, Discourse vuelve a funcionar. Pero entonces no puedo ejecutar rebuild app de nuevo. El mismo error.

¿Podrían ayudarme a resolver esto?

Saludos cordiales

Tu servidor se está quedando sin memoria mientras se inicia. ¿Podrías compartir la salida de free -m?

1 me gusta

@:~# free -m
total used free shared buff/cache available
Mem: 985 777 70 49 136 44
Swap: 2047 228 1819

Vaya, me pregunto si se agotará la memoria también después del reinicio. Además, no he instalado nada más desde la última actualización.

Tengo el mismo problema: no hay suficiente memoria para Node.js.
Usé export NODE_OPTIONS="--max_old_space_size=4096 --some_other_option", pero no dio resultados.

También tuve el mismo rastreo de pila al intentar reconstruir. Es una instalación relativamente nueva que estoy usando solo para desarrollo y pruebas, así que todavía debería tener bastante espacio, ¿verdad?

SO: Ubuntu 20.04.1 LTS
Salida de free -m:

root@discourse-test-environment:/var/discourse# free -m
              total        used        free      shared  buff/cache   available
Mem:            981         136         581           0         263         698
Swap:          2047         113        1934
1 me gusta

Eso está un poco por debajo del mínimo de 1 GB. Puedes intentar aumentar un poco la memoria de intercambio, pero te recomendaría más RAM.

Si recibes ese error, necesitas más RAM (o quizás memoria de intercambio, pero la RAM es mejor).

3 Me gusta

Vale, pero ¿puedes decirnos cuál es la razón de ese nuevo comportamiento? Ha funcionado con esa configuración durante más de un año. ¿Qué hace que Discourse sea diferente ahora en comparación con el pasado?

1 me gusta

gracias por la recomendación. Sí, es un poco extraño; por lo general, he funcionado bien con el archivo de intercambio (swap) predeterminado de 2 GB en un droplet de Digital Ocean de 5 dólares. Estaré atento para ver si esto se vuelve más común con las últimas actualizaciones o algo así.

De todos modos, procedí a agregar mucho más intercambio (4 GB) en un archivo separado,

pero la actualización aún falló. Tal vez más RAM sea no negociable. Esto es inesperado porque la instancia tiene actualmente 1 tema y 1 usuario. También me pregunto si debo hacer algo para asegurarme de que Discourse sepa usar el intercambio o si está accesible por defecto.

Mi nueva salida de free -m

              total        used        free      shared  buff/cache   available
Mem:            981         138         576           0         266         703
Swap:          6143         109        6034
1 me gusta

Sí, también estoy en un Droplet de Digital Ocean con 1 vCPU y 1 GB de vRAM :slight_smile:

1 me gusta

He aumentado la memoria de intercambio a 3 GB. Aún no funciona y aparece el mismo error.

1 me gusta

Puedo reconstruir mi instancia de prueba con solo 2.5 GiB de RAM + swap. Sin embargo, es posible que tu instancia requiera más de eso.

¿Tienes algún plugin instalado? Sospecho que uno de ellos está causando un uso masivo de memoria durante la compilación.

¿Puedes reconstruir sin plugins y ver si eso soluciona el problema?

Gracias por intervenir:

Por curiosidad, ¿cuál es la distribución entre RAM y swap? ¿Solo estás contando el espacio “libre” en ambos o el tamaño total del archivo de swap más la RAM total de la instancia?

Ah, claro, por supuesto; se me había olvidado mencionar que esperaba instalar el plugin de autenticación Discourse OpenID Connect.

Actualmente también tengo instalado el plugin Data Explorer.


  • Lo intenté de nuevo solo con Data Explorer + Docker Manager y sin éxito; la misma traza de pila que compartí antes.
  • Lo intenté de nuevo sin plugins (solo Docker Manager) y la reconstrucción aún no funcionó.

Seguiré buscando, ya que aparte de intentar agregar el plugin ConnectID, no he cambiado nada desde la instalación original.

Estoy teniendo un problema que podría estar relacionado en Trouble with `tests/test_helper`? - #2.

Intenté reconstruir la aplicación sin ningún complemento. Sin cambios. El mismo error.

No entiendo esto, pero parece un error. Estoy intentando hacer un bootstrap en este sitio. No hay plugins no estándar. Acabo de mover los recursos de un bucket a otro y todo funciona. Estaba haciendo una reconstrucción más para agregar DISCOURSE_S3_UPLOAD_BUCKET al ENV para que no aparezca en la UX. Cuando esto falló la primera vez, comenté esa línea e intenté de nuevo con la misma configuración que funcionó hace 3 días.


Done compressing embed-application-9cef8308c816fc1d83137e63d6c556c6cc2b68fe2b6e5ce16cca6766ba2c0ae4.js : 0.17 secs

844614.350963717 Compressing: discourse/tests/test_helper-8590b31b8e73c4172aeea4a4a6bd1930ccbce2547a20d831a30d457ba092a631.js
terser '/var/www/discourse/public/assets/discourse/tests/_test_helper-8590b31b8e73c4172aeea4a4a6bd1930ccbce2547a20d831a30d457ba092a631.js' -m -c -o '/var/www/discourse/public/assets/discourse/tests/test_helper-8590b31b8e73c4172aeea4a4a6bd1930ccbce2547a20d831a30d457ba092a631.js' --source-map "base='/var/www/discourse/public/assets/discourse/tests',root='/assets/discourse/tests',url='https://CORRECT_CDN_ADDRESS.b-cdn.net/assets/discourse/tests/test_helper-8590b31b8e73c4172aeea4a4a6bd1930ccbce2547a20d831a30d457ba092a631.js.map'"
Killed
rake aborted!
Errno::ENOENT: No such file or directory @ rb_file_s_size - /var/www/discourse/public/assets/discourse/tests/test_helper-8590b31b8e73c4172aeea4a4a6bd1930ccbce2547a20d831a30d457ba092a631.js
/var/www/discourse/lib/tasks/assets.rake:290:in `size'
/var/www/discourse/lib/tasks/assets.rake:290:in `block (4 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:181:in `block in concurrent?'
/var/www/discourse/lib/tasks/assets.rake:281:in `block (3 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:272:in `each'
/var/www/discourse/lib/tasks/assets.rake:272:in `block (2 levels) in <main>'
/var/www/discourse/lib/tasks/assets.rake:181:in `concurrent?'
/var/www/discourse/lib/tasks/assets.rake:269:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)
I, [2021-04-26T18:38:36.072881 #1]  INFO -- : Updating Discourse Loading Slider...
Downloading MaxMindDB...
Compressing Javascript and Generating Source Maps

Me pregunté si había algún problema con la URL del CDN, pero todas las líneas anteriores la incluían y funcionaban bien.

¿Significa esto que hay CSS defectuoso en su tema? Si es así, ¡ay! Solo hay algo de CSS en su tema maestro. También estos componentes: https://github.com/discourse/DiscoTOC.git y https://github.com/davidtaylorhq/discourse-loading-slider.git

¿Es este un droplet de tamaño mínimo? Parece que ese archivo es bastante difícil de comprimir para terser, ya que genera mucha presión de memoria.

Oh. Es sorprendentemente pequeño. Es un sitio que creo que ustedes configuraron hace algunos años (cuando aún gestionaban un sitio que no estaba en su propia infraestructura).

root@community:/var/discourse# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.9G        1.2G        101M        259M        655M        354M
Swap:          2.0G        1.2G        773M

Ah. Vale. Es un droplet de 2 GB de DigitalOcean y tengo acceso a su panel de control. Les diré que necesitamos actualizar a 4 GB y migrarlos a una instancia AMD.

EDITO: Pero si esto es solo para comprimir ese archivo, ¿no debería ser suficiente un droplet de 2 GB?

Este archivo de ayuda para pruebas es exigente para la compresión.

  • UglifyJS utiliza 1.5 GB de RAM para comprimirlo.

  • Terser usa un poco más de 1 GB. Tarda 40 segundos. Para comparar, el mismo servidor tarda 8 segundos en Ember+jQuery :scream:

@eviltrout ¿deberíamos tener este archivo en producción?

Ah, parece que proviene de este cambio de @Osama

-rw-r--r-- 1 discourse discourse  14M Apr 26 19:13 _test_helper-f4c4b5bf0657eab910d85b9a65b4bddbbbe2ce2ba603b17fe11b3d633d324e34.js
-rw-r--r-- 1 discourse discourse 6.6M Apr 26 19:14 test_helper-f4c4b5bf0657eab910d85b9a65b4bddbbbe2ce2ba603b17fe11b3d633d324e34.js
-rw-r--r-- 1 discourse discourse 1.1M Apr 26 19:14 test_helper-f4c4b5bf0657eab910d85b9a65b4bddbbbe2ce2ba603b17fe11b3d633d324e34.js.br
-rw-r--r-- 1 discourse discourse 1.5M Apr 26 19:14 test_helper-f4c4b5bf0657eab910d85b9a65b4bddbbbe2ce2ba603b17fe11b3d633d324e34.js.gz
-rw-r--r-- 1 discourse discourse 5.7M Apr 26 19:14 test_helper-f4c4b5bf0657eab910d85b9a65b4bddbbbe2ce2ba603b17fe11b3d633d324e34.js.map
8 Me gusta

Solo para añadir otro dato: sigo experimentando fallos en la reconstrucción después de eliminar los dos componentes del tema. Así que solo estoy usando el tema Light predeterminado.

También, ¿de dónde proviene esta salida? Estoy buscando verificar y depurar un poco por mi cuenta. ¿Es como una opción detallada en ./launcher rebuild app?

Corregir esto adecuadamente va a tomar un poco de tiempo, así que voy a revertir ese cambio por ahora.

9 Me gusta