Solución 1:
Respondí esto para otra pregunta aquí:
Git no puede enviar con el error 'memoria insuficiente'
No estoy respondiendo todas sus preguntas aquí, sino la pregunta en su título:
Como configurar shmall, shmmax, shmmni, etc… en general y para postgresql
Con algunas distribuciones de kernel, hay configuraciones que evitan que el kernel asigne la memoria máxima a un solo proceso:
Establecer parámetros del kernel
Modificar el /etc/sysctl.conf
archivo para incluir las líneas apropiadas para su sistema operativo:
# Red Hat Enterprise Linux 3.0 and CentOS 3.x
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmin = 1
kernel.shmseg = 10
# semaphores:
semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128
fs.file-max = 65536
# Red Hat Enterprise Linux 4.0 and CentOS 4.x
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
Si su proceso excede los límites, el kernel eliminará el proceso a pesar de que la memoria máxima informada está disponible en su sistema.
Nota:tenga cuidado con esta configuración. Probablemente no quiera usar la configuración en ese ejemplo, ya que la saqué de un servidor en nuestro entorno.
Algunas notas adicionales para mencionar:
Para actualizar y probar la configuración del kernel con sysctl, use los siguientes comandos:
Lista de configuraciones actuales:
sysctl -A | grep shm
sysctl -w kernel.shmmax=<value> to write in sysctl.conf
sysctl -p /etc/sysctl.conf to read/reload the values from sysctl.conf
Deshabilite Linux seguro editando el /etc/selinux/config
archivo, asegurándose de que el indicador SELINUX esté configurado de la siguiente manera.
SELINUX=disabled
¿Es esto apropiado? Si no (o no necesariamente), ¿en qué caso sería apropiado?
La configuración del kernel generalmente se define de manera más estricta en entornos de centros de datos cuando los proveedores de ISP no quieren que un solo proceso de cliente acapare todos los recursos en un servidor compartido.
Por lo general, no es necesario configurar los parámetros de la memoria del kernel a menos que tenga un proceso que el kernel está eliminando debido a la escasez de recursos.
En algunos casos, Postgres también puede asignar más memoria a tamaños de página específicos de lo que está disponible en la memoria compartida:
* The PostgreSQL server failed to start. Please check the log output:
2011-11-04 05:06:26 UTC FATAL: could not create shared memory segment: Invalid
argument
2011-11-04 05:06:26 UTC DETAIL: Failed system call was shmget(key=5432001, size
=161849344, 03600).
2011-11-04 05:06:26 UTC HINT: This error usually means that PostgreSQL’s reques
t for a shared memory segment exceeded your kernel’s SHMMAX parameter. You can
either reduce the request size or reconfigure the kernel with larger SHMMAX. To
reduce the request size (currently 161849344 bytes), reduce PostgreSQL’s shared
_buffers parameter (currently 19200) and/or its max_connections parameter (curre
ntly 53).
If the request size is already small, it’s possible that it is less than
your kernel’s SHMMIN parameter, in which case raising the request size or recon
figuring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memo
ry configuration.
…fail!
Los errores como el ejemplo anterior se pueden resolver modificando la configuración de recursos del núcleo. La configuración y los métodos recomendados para determinar la configuración de los recursos se describen en detalle aquí:
http://www.postgresql.org/docs/9.1/static/kernel-resources.html
Sin embargo, realmente no tiene que tocar estas configuraciones a menos que se encuentre con situaciones de escasez de recursos relacionadas con el proceso de postgres. Estas situaciones ocurren, con mayor frecuencia, en entornos compartidos o servidores con pocos recursos asignados.
¿Alguien puede explicar cómo configurarlos realmente desde cero?
En cuanto a la optimización de Postgres, debe leer esto:
http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
Solución 2:
¡Oh! Aquí encuentro una herramienta maravillosa para calcular la configuración óptima de memoria de nuestro servidor postgresql.
http://pgtune.leopard.in.ua/