You are on page 1of 4

Paramtre Kernel Shmmax

SHMMAX = Taille maximum du segment de mmoire partage (octets ou bytes de 8 bits)


Pour visualiser la valeur du systme utilise :
sysctl -a | grep shmmax
ou
cat /proc/sys/kernel/shmmax
Pour connatre la valeur maximale du systme (dpendant de la RAM) :
ipcs -m -l
Cette commande affiche les limites de la mmoire partage.
Le paramtre qui nous interesse ici est : max total shared memory (kbytes)
Il suffit de le multiplier par 1024 pour avoir sa valeur en bytes ou octets.
Pour modifier ce paramtre , taper :
vi /etc/sysctl.conf
Puis modifier la ligne :
kernel.shmmax =
et pour appliquer les modifications, taper
sysctl -p
Autre mthode pour modifier ce paramtre :
sysctl -w kernel.shmmax="valeur"
Ordonnancement d'entres/sorties
Vous avez maintenant pris l'habitude de lancer vos programmes gourmands avec nice pour viter
qu'ils ne monopolisent le processeur. C'est bien, mais il leur arrive encore parfois de consommer
tout les accs dique et de faire ramer votre swap.

Et le sauveur s'appelle ionice. Son utilisation est simple :


$ ionice -c 2 -n 4 /usr/local/monscript

Mais que veulent dire -c 2 et -n 4 ? Il s'agit simplement de la classe et de la priorit.


-c 1 : temps rel, ne pas utiliser sous peine de geler la machine
-c 2 : standard on donne acces au disque ds qu'on en a l'occasion
-c 3 : on donne accs au disque lorsque personne ne l'a demand2 depuis un certain temps
(quasiment jamais)
Le -n donne le niveau de priorit l'intrieur d'une classe. Pour la classe 2 il y a 8 niveaux de 0 7
(0 tant la plus forte priorit). Tout comme celles de nice, ces priorits sont hrites.
Pour rcuprer les informations pour un processus existant partir de son pid :
$ ionice -p1

Vous constaterez que la plupart des processus sont dans la classe none. Selon les documentations
cela connespond -c2 -n4 ou un calcul en fonction de la valeur de nice du preocessus.
Ainsi pour lancer un programme particulirement gourmand je vous conseille quelque chose du
genre
$ nice -n 19 ionice -c2 -n7 /usr/local/monscript

Passons une partie plus technique. Ceci n'est possible que parce que le noyau contient un
scheduler d'io. C'est une innovation rcente. Ce n'est que depuis le 2.6.18 que le scheduler cfq est
prsent par dfaut et c'est le seul qui supporte ces priorits. Mais ce n'est pas le seul exister. Vous
pouvez en compiler plusieurs et en changer soit au boot (avec l'option elevator=) soit aprs le boot
disque par disque avec la commande
$ echo "cfq" > /sys/block/hda/queue/scheduler

Le choix d'un bon scheduler peut influencer les performances de vos serveurs de base de donnes ...
La documentation se trouve dans le rpertoire Documentation/block des sources du noyau.
Changer la priorit d'xecution des processus
Lorsque vous lancez un processus gourmand en ressources, il arrive que vous sachiez d'avance que
celui-ci prendra du temps. Dans ce cas, vous acceptez qu'il ne consomme pas le maximum de
ressources de la machine dont il est capable, pour que celle-ci puisse continuer fonctionner
normalement (rpondre aux commandes shell par exemple).
Si vous tes prvoyants, vous pouvez utiliser la commande nice :
$ nice -n 19 ./poid-lourd

Nice utilise des niveaux de priorit. Ces niveaux sont compris entre -20 (priorit absolue) et +20
(tout le monde passe avant). Les valeurs ngatives ne peuvent tre utilises que par l'utilisateur root.
Pour connatre le nice d'un processus, la commande top affiche la valeur pour chaque processus
dans la colonne NI.
Un processus hrite du nice de son pre par dfaut (en gnral 0 car init est 0). Mais il se peut que
vous vouliez changer cette valeur aprs coup. Pour cela il existe la commande renice :
# 1234 est un pid
$ renice 10 1234

Attention toutefois, un utilisateur normal ne peut qu'augmenter la valeur de nice (et donc rduire la
priorit d'un processus). Seul root peut la rduire (et ventuellement lui donner une valeur
ngative).
Faites attention, utiliser des valeurs ngatives fortes peut bloquer indfiniment votre systme.

Tuning postgresql
The default configuration for PostgreSQL 9.1 needs to be tuned for the amount of data you are
about to add to it. Edit the file /etc/postgresql/9.1/main/postgresql.conf and make the following
changes:
shared_buffers = 128MB
checkpoint_segments = 20
maintenance_work_mem = 256MB
autovacuum = off

These changes require a kernel configuration change, which needs to be applied every time that the
computer is rebooted. As root, edit /etc/sysctl.conf and add these lines near the top after the other
kernel definitions:
# Increase kernel shared memory segments - needed for large databases
kernel.shmmax=268435456

Reboot your computer. Run this:


sudo sysctl kernel.shmmax

and verify that it displays as 268435456.


Forum :
Here is the tunning I apply on my (5) servers (Debian Wheezy)
1. create an empty file pg_memory.sh in /root directory and copy/paste the code below :
page_size=`getconf PAGE_SIZE`
phys_pages=`getconf _PHYS_PAGES`
shmall=`expr $phys_pages / 2`
shmmax=`expr $shmall \* $page_size`
echo kernel.shmmax = $shmmax
echo kernel.shmall = $shmall
echo 'Edit /etc/sysctl.conf and apply with : sysctl -p'
1. as root execute command :
bash pg_memory.sh
1. As notified in the script, copy/paste the result of the script in /etc/sysctl.conf and execute
command :
sysctl -p
1. You should now have these parameters at the end of sysctl.conf (this is an example):
kernel.shmmax = 2107961344
kernel.shmall = 514639

1. now install pgtune (apt-get install pgtune)


2. as root, execute command :
pgtune -i /etc/postgresql/9.1/main/postgresql.conf -o pgsql.conf
1. This will duplicate the postgresql.conf and add some parameters at the end of the file.
2. Just open the new file (/root/pgsql.conf)
3. Copy/past the end of the file (lines with pgtune wizard as comment) in the real one
( /etc/postgresql/9.1/main/postgresql.conf ) . Backup it first!
4. Restart the server
Note : change path to postgresql.conf according to your OS/Server
PgTune will set parameters according to your system (OS, HD, Memory, etc).
I always trust pgtune and copy/paste "as is" in postgresql.conf. For now, all my servers are running
well.

You might also like