Bien régler MongoDB pour éviter la saturation de disque
Petite surprise pendant mes tests pour savoir qui de PHP 5.5, 5.6, ou HHVM aura ma préférence, le log d’HHVM m’a sorti une erreur après son installation sur le fait que je n’avais plus de place. Et il s’avère que MongoDB, que je vous ai fait découvrir il y a quelques temps maintenant (là, là, puis là et encore là), peut être très gourmand. Alors on va contenir un peu tout ça.
En effet, lors du premier affichage de la page d’accueil de la copie du blog, que j’ai trouvé très lente, même sur ma connexion, j’ai découvert ça dans le log d’HHVM :
1 |
Erreur de la base de donn\xc3\xa9es WordPress Disk full (/tmp/#sql_90f_0.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") pour la requ\xc3\xaate ... |
Hein ? bon, sans non plus refaire toutes les manips que je vous conseille dans cet article, j’ai déjà nettoyé le cache d’APT, car il m’a installé pas mal de paquets en plus d’HHVM. 500Mo de gagné, mais toujours 94% d’occupation. Donc un petit coup de ncdu, et tiens, le dossier /var/lib/mongodb/journal prend plus de 3Go à lui tout seul, avec donc trois fichiers d’1Go chacun. Euh, oui, sauf que ma base de données n’a que 441 films dedans, pas de quoi retourner un disque dur, même virtuel, normalement.
Après un tour sur la documentation, il s’avère que MongoDB est très généreux sur ces fichiers de pré-allocation. Fort heureusement, il est possible de réduire la taille de ces fichiers. On commence par couper temporairement le serveur MongoDB :
1 |
sudo service mongodb stop |
Ensuite, on supprime ces fichiers proprement :
1 |
sudo rm -f /var/lib/mongodb/journal/prealloc.* |
Avant de relancer MongoDB, on édite son fichier de configuration /etc/mongodb.conf pour y ajouter, à la fin, la simple ligne suivante :
1 |
smallfiles = true |
Dès lors, les fichiers de pré-allocation ne pèseront plus que 128Mo au lieu d’1Go. Autant dire que ça fait pas mal de place de gagnée. Il n’y a plus alors qu’à démarrer le serveur :
1 |
sudo service mongodb start |
Après quelques secondes, si on regarde, les fichiers sont recréés, mais avec la nouvelle taille :
1 2 3 4 5 |
seboss666@heberg-new:~$ l /var/lib/mongodb/journal/ total 393216 -rw------- 1 mongodb nogroup 134217728 janv. 17 22:05 j._0 -rw------- 1 mongodb nogroup 134217728 janv. 17 22:04 prealloc.1 -rw------- 1 mongodb nogroup 134217728 janv. 17 22:04 prealloc.2 |
Attention toutefois, car sur de grosses bases de données, MongoDB pourrait être poussé à créer plus de fichiers du coup, ce qui entraînerait des chutes de performance. Il faudra donc faire un choix, la performance n’étant pas ma priorité pour l’instant.
Concernant HHVM, j’aurais l’occasion d’en reparler dans quelques temps (peut-être plus tôt que prévu). Juste pour dire que les louanges sont méritées.
Hello,
tes articles sur MongoDB et python sont très intéressants. 🙂
Dommage que je ne puisse pas commenter au travail (blocage du proxy ???)
@+,
NicK.
Le proxy de ton employeur doit bloquer Disqus 😀
J’ai un peu ralenti sur mon API (la raison pour laquelle je me suis intéressé à MongoDB à la base, Python faisant déjà partie des mes curiosités), donc les articles seront moins fréquents. Mais je n’abandonne pas 🙂 En ce moment, c’est un peu plus sysadmin, et j’essaie d’avancer sur un tuto vidéo. Mais le son, c’est ultra galère 🙁