[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Problemas de memoria



El Sat, 26 Sep 2015 09:56:58 +0200, José Miguel (sio2) escribió:

> Un saludo a la lista:
> 
> A ver si me podéis guiar y aconsejar para la nueva que se me avecina.

Pues así a botepronto, "píldoras memorín" :-)
 
> Administro un servidor en la distancia (muy en la distancia), en el que
> tenía wheezy, y en el que hace cosa de dos semanas instalé jessie y
> reorganicé un poco los servicios. No fue una simple actualización, sino
> una instalación desde cero.
> 
> El caso es que por la tarde dejó de servir convenientemente (la mayor
> parte de los servicios no van). He probado a conectarme por SSH y me
> encuentro con esto:
> 
> #v+
> $ ssh yo@mlejanoservidor [...]
> Last login: Thu Sep 24 23:56:00 2015 from X.Y.Z.T -bash: fork: No se
> pudo asignar memoria -bash: xmalloc: no se pueden asignar 4112 bytes
> (2719744 bytes asignados) Connection to milejanoservidor closed.
> #v-
> 
> Parece claro que el servidor se ha quedado sin memoria, ¿no? Así que
> supongo que me toca averiguar qué programa es el culpable de esto.

(...)

Supongo que ahora mismo no podrás ejecutar nada (y un reinicio no sería 
buena idea) por lo que tendrás que esperar a que haya alguien delante del 
servidor para hacer las pruebas.

Lo primero sería ejecutar "free" (para ver qué cantidad de RAM hay en uso/
disponible) y "top" (para ver qué servicios están consumiendo más RAM).

(...)

> La solución obviamente era ampliar la memoria y así lo hice, pero
> también añadí, entre tanto, a sysctl,conf:
> 
> vm.overcommit_memory = 2
> 
> para que el núcleo no obrara así. Ahora en el nuevo sistema, también
> tengo ese valor en el fichero.

Pues yo lo dejaría con el valor predeterminado y me centraría en 
gestionar el consumo de RAM, para lo cual tendrás que ver qué servicios 
tienes en ejecución y si puede haber algún proceso desbocado.

(...)

> Por cierto con eso de 2719744 bytes asignados, ¿a qué se refiere?
> ¿Asignados a quién? Porque no puede ser la memoria total, que es 8 GB.

Al cerrarte la sesión SSH entiendo que se referirá a eso, que no puede 
ubicar la memoria necesaria para abrir una sesión de bash, asignar una 
terminal, etc.

En la documentación del kernel explican esos valores que has asignado a 
"vm.overcommit_memory":

https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

A lo que "grosso-modo" entiendo que al usar el valor predeterminado (0) 
le estás diciendo al kernel que coja la memoria (virtual/real) que pueda 
por lo que supongo que algún proceso será más proclive a terminar 
cascando con un OOM (desbordamiento). 

El valor (1) y el (2) parecen definir situaciones opuestas, mientras que 
el primero sería algo como así como decir "kernel, a revienta caballo, 
asigna la memoria que necesites, aunque no 'hayga' ¡¡¡yiiihaaa!!!" y la 
segunda sería la opción más conservadora definiendo una valor determinado 
para la asignación de la memoria a los procesos (SWAP + 50% de RAM) lo 
que hace que en lugar de recibir un error de desbordamiento OOM recibas 
ese mensaje de "no puedo asignar [...] memoria", que para el caso es lo 
mismo.

Saludos,

-- 
Camaleón


Reply to: