GNU/Linux >> Tutoriels Linux >  >> Linux

Comment définir shmall, shmmax, shmmin, etc ... en général et pour postgresql

Solution 1 :

J'ai répondu à ceci pour une autre question ici :

Git ne parvient pas à pousser avec l'erreur "mémoire insuffisante"

Je ne réponds pas à toutes vos questions ici, mais à la question dans votre titre :

Comment définir shmall, shmmax, shmmni, etc… en général et pour postgresql

Avec certaines distributions du noyau, certains paramètres empêchent le noyau d'allouer la mémoire maximale à un seul processus :

Définir les paramètres du noyau

Modifier le /etc/sysctl.conf fichier pour inclure les lignes appropriées à votre système d'exploitation :

# 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 votre processus dépasse les limites, le noyau tuera le processus malgré la mémoire maximale signalée comme étant disponible sur votre système.

Remarque :soyez prudent avec ces paramètres. Vous ne souhaitez probablement pas utiliser les paramètres de cet exemple, car je les ai extraits d'un serveur de notre environnement.

Quelques notes supplémentaires à mentionner :

Pour mettre à jour et tester les paramètres du noyau avec sysctl, utilisez les commandes suivantes :

Lister les paramètres actuels :

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

Désactivez Linux sécurisé en modifiant le /etc/selinux/config fichier, en veillant à ce que l'indicateur SELINUX soit défini comme suit.

SELINUX=disabled

Est-ce approprié ? Si non (ou pas forcément), dans quel cas serait-il approprié ?

Les paramètres du noyau sont généralement définis plus strictement dans les environnements de centre de données lorsque les fournisseurs de services Internet ne veulent pas qu'un seul processus client monopolise toutes les ressources sur un serveur partagé.

Vous n'avez généralement pas besoin de définir les paramètres de mémoire du noyau, sauf si vous avez un processus qui est tué par le noyau en raison d'un manque de ressources.

Dans certains cas, postgres peut également allouer plus de mémoire à des tailles de page spécifiques que ce qui est disponible dans la mémoire partagée :

* 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!

Des erreurs telles que l'exemple ci-dessus peuvent être résolues en modifiant les paramètres de ressources de votre noyau. Les paramètres et méthodes recommandés pour déterminer les paramètres des ressources sont décrits en détail ici :

http://www.postgresql.org/docs/9.1/static/kernel-resources.html

Cependant, vous n'avez vraiment pas besoin de toucher à ces paramètres, sauf si vous rencontrez des situations de pénurie de ressources liées au processus postgres. Ces situations se produisent, le plus souvent, dans des environnements partagés ou des serveurs avec peu de ressources qui leur sont allouées.

Quelqu'un peut-il expliquer comment les configurer à partir de zéro ?

En ce qui concerne le réglage de Postgres, vous devriez lire ceci :

http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

Solution 2 :

Oh ! Je trouve ici un outil formidable pour calculer la configuration optimus mem de notre serveur postgresql.

http://pgtune.leopard.in.ua/


Linux
  1. Comment définir une variable d'environnement pour tout le monde sous mon système Linux ?

  2. Comment puis-je configurer la saisie semi-automatique pour les commandes Git ?

  3. Hibernate + MySQL :comment définir l'encodage utf-8 pour la base de données et les tables

  4. Comment définir JAVA_HOME sous Linux pour tous les utilisateurs

  5. Comment définissez-vous un mot de passe pour transmission-daemon, le serveur client BitTorrent ?

Comment installer et configurer SeedDMS

Comment configurer des appareils Razer sous Linux pour des effets d'éclairage et d'autres configurations

Comment définir la date et l'heure sous Linux

Comment définir un pseudo par défaut pour les nouvelles connexions irssi ?

Comment définir le chemin pour les commandes sudo

Comment configurer correctement zram et swap