Error 'Not enough space' de OpenJDK en Digital Ocean

Author
By Darío Rivera
Posted on 2020-01-06 in Digital Ocean
Tags   SonarQube 8

Un error muy común cuando empiezas con Digital Ocean, es que al instalar casi cualquier programa basado en Java como SonarQube obtienes enseguida un error de espacio en memoria. En mi caso, al iniciar el servicio de SonarQube he obtenido un error similar al siguiente.

Running SonarQube...
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    | 
jvm 1    | 2020.01.06 17:26:13 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /var/opt/sonarqube-8/temp
jvm 1    | 2020.01.06 17:26:13 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
jvm 1    | 2020.01.06 17:26:13 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/var/opt/sonarqube-8/elasticsearch]: /var/opt/sonarqube-8/elasticsearch/bin/elasticsearch
jvm 1    | 2020.01.06 17:26:13 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
jvm 1    | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
jvm 1    | 2020.01.06 17:26:14 INFO  app[][o.e.p.PluginsService] no modules loaded
jvm 1    | 2020.01.06 17:26:14 INFO  app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
jvm 1    | OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e5330000, 449642496, 0) failed; error='Not enough space' (errno=12)
jvm 1    | #
jvm 1    | # There is insufficient memory for the Java Runtime Environment to continue.
jvm 1    | # Native memory allocation (mmap) failed to map 449642496 bytes for committing reserved memory.
jvm 1    | # An error report file with more information is saved as:
jvm 1    | # ../logs/es_hs_err_pid6724.log
jvm 1    | 2020.01.06 17:26:14 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 1
jvm 1    | 2020.01.06 17:26:14 INFO  app[][o.s.a.SchedulerImpl] Process[es] is stopped
jvm 1    | 2020.01.06 17:26:14 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
jvm 1    | 2020.01.06 17:26:16 INFO  app[][o.e.c.t.TransportClientNodesService] failed to get node info for {#transport#-1}{d6qtSSpxQdmKK7HdJgDjIQ}{127.0.0.1}{127.0.0.1:9001}, disconnecting...
jvm 1    | java.lang.IllegalStateException: Future got interrupted
...
jvm 1    | 	... 17 common frames omitted
wrapper  | <-- Wrapper Stopped

Es muy importante aprender a leer los errores y encontrar realmente la causa. En este caso, la línea más importante y que nos dice cuál es el origen del error es la siguiente:

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e5330000, 449642496, 0) failed; error='Not enough space' (errno=12)

Sin duda, al leer este error se puede entender de manera clara que está pasando, y no es más que el OpenJDK no tiene la memoria suficiente para ejecutar la máquina virtual y correr el SonarQube. Es bien sabido que la máquina virtual de java consume bastantes recursos del servidor. Otro punto importante aquí, es ver la cantidad de memoria que no se ha podido asignar. En este caso, la siguiente línea nos dice cuánta memoria nos falta para correr nuestro programa.

# Native memory allocation (mmap) failed to map 449642496 bytes for committing reserved memory.

Haciendo la conversión nos damos cuenta que nos faltan alrededor de 449.64 MB en memoria RAM. Con esto, ya podemos tranquilamente ingresar a nuestra cuenta en Digital Ocean, seleccionar nuestro Droplet, y en la opción Resize seleccionar CPU and RAM Only y seleccionar después el plan adecuada según las necesidades. Espero que este post te haya sido de ayuda, hasta pronto!. 


Si te ha gustado este artículo puedes invitarme a tomar una taza de café

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.