RE: fallo en el server "Out of Memory"

From: "Fernando Hevia" <fhevia(at)ip-tel(dot)com(dot)ar>
To: "'Sergio Gabriel Rodriguez'" <sgrodriguez(at)gmail(dot)com>, "'Alvaro Herrera'" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: 'PostgreSQL Español Ayuda' <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: fallo en el server "Out of Memory"
Date: 2009-09-29 16:36:44
Message-ID: 1D395F244ABD4931951A22FB136B1D21@iptel.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

> -----Mensaje original-----
> De: Sergio Gabriel Rodriguez
>
> Desactiva memory overcommit en el kernel. Jaime dio
> una URL de la
> documentacion hace no mucho tiempo, a una pregunta muy
> similar a la
> tuya.
>
> Álvaro, que implica desactivar el overcommit?, a que puede
> deberse este problema? antes de esto el uso de memoria del
> server era holgado
>

El overcommit es un feature por el cual el kernel de Linux reservará memoria
para un proceso aunque no tenga esa cantidad de memoria libre disponible.
Con overcommit habilitado, cuando un proceso pide memoria el kernel le dirá
"tomá, acá tenés" pero en realidad no efectiviza esa reserva de memoria
hasta tanto el proceso no escriba sobre ella. Si al momento de querer
escribir en la memoria asignada el kernel se da cuenta que en realidad no
dispone de la cantidad prometida, entonces matará algún proceso para liberar
memoria. Qué proceso elige matar depende de una ponderación que hace sobre
todos los procesos ejecutando.
Lamentablemente esta ponderación no tiene en cuenta lo grave que resulta
matar un backend de postgres.

Suponemos que eso ocurrió con uno de tus backend de postgres y por eso se
vino abajo toda la base. Como ves, el consumo de memoria puede o no haberse
originado en postgres. Si fue en postgres lo más probable es que tengas que
revisar el valor de 'work_mem' y bajarlo.

Al desactivar overcommit, cuando no haya más memoria el kernel responderá a
los procesos con un "lo siento, no hay más". Entonces los procesos tendrán
la oportunidad de actuar acorde, generalmente con un bonito error diciendo
"no se puede hacer tal operación porque no hay memoria".

Para desactivar overcommit configura el valor '2' en
/proc/sys/vm/overcommit_memory y '1' en /proc/sys/vm/overcommit_ratio

Otra posibilidad es dejar overcommit como está y limitar la memoria virtual
asignable a cada usuario con 'ulimit -v'. Si los usuarios no pueden (en su
conjunto) solicitar más memoria que la disponible entonces el mecanismo de
overcommit nunca entrará en acción.

Saludos,
Fernando.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2009-09-29 16:56:03 Re: fallo en el server "Out of Memory"
Previous Message Sergio Gabriel Rodriguez 2009-09-29 15:56:56 Re: fallo en el server "Out of Memory"