Vider la mémoire de Linux…

La « bonne » nouvelle à propos de Linux, c’est que le système Open Source utilise et anticipe l’utilisation de toutes les ressources auquel il a accès. C’est le cas en particulier de la mémoire ou de l’espace de swap. Bien sur, ça signifie aussi que, quand il s’agit de dire si l’utilisation de la mémoire est pertinente pour votre base Oracle, vous sachiez de quoi vous parlez. Prenons un exemple d’idées communément répandues :

Pour que l’utilisation de la mémoire soit optimale, votre OS ne doit pas utiliser de swap !

En fait, si vous voulez empêcher Linux d’utiliser l’espace de swap, au moins avec le kernel 2.6, vous ne trouverez sûrement pas d’autres méthodes que de ne pas activer cet espace (Si c’est une voie que vous voulez explorer, soyez attentif au fonctionnement de OOM Killer). Linux a plusieurs bonnes raisons d’utiliser l’espace de swap. L’une d’entre elle peut évidement être d’utiliser cet espace comme un espace temporaire pour défragmenter sa mémoire. En fait ce n’est pas la seule, pour des ressources qui doivent résider en mémoire mais qui ne sont pas utilisées, Linux est capable d’anticiper leur mise en swap, pour le cas où… Donc, même si votre mémoire n’est pas remplie à 100%, Linux utilisera la swap. La bonne nouvelle pour Oracle, c’est que ça lui permettra, si le besoin s’en fait sentir d’utiliser plus de mémoire le moment venu sans « swaper » puisque Linux aura anticipe cette opération.

Mais à force de digressions, nous n’arriverons pas à l’objet de ce post… Alors, si vous voulez comprendre plein de chose sur l’utilisation de la mémoire sur Linux, regardez la video de Christo sur le site de Pythian. En fait, ça fait toujours un peu suspect de faire de la pub pour le travail d’un collègue, mais en l’occurrence celui là est excellent. Vous y apprendrez, par exemple, si ce n’est pas déjà le cas, quel est l’intérêt des Huges Pages même sur un système 64 bits ou pourquoi le fait qu’ASM nécessite la mise en place d’une instance Oracle n’est pas un problème comparé à d’autres systèmes de fichiers.

Un autre « mythe », très répandu vient du fait que :

la plupart des systèmes de supervision vous alerte quand la mémoire approche les 100% d’utilisation !

Prenons un exemple concret. Voici un extrait de l’utilisation de la mémoire d’un système sur lequel Oracle est installé :

$ cat /proc/meminfo
MemTotal: 8111348 kB
MemFree: 319324 kB
Buffers: 82440 kB
Cached: 1782496 kB
SwapCached: 9416 kB
Active: 771644 kB
Inactive: 1633736 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 8111348 kB
LowFree: 319324 kB
SwapTotal: 8008360 kB
SwapFree: 7953384 kB
Dirty: 664 kB
Writeback: 0 kB
Mapped: 617392 kB
Slab: 86120 kB
CommitLimit: 9442592 kB
Committed_AS: 2604280 kB
PageTables: 27788 kB
VmallocTotal: 536870911 kB
VmallocUsed: 5388 kB
VmallocChunk: 536865067 kB
HugePages_Total: 2560
HugePages_Free: 1087
Hugepagesize: 2048 kB

La mémoire non utilisée est d’environ 300Mo comparé au 8 Go disponibles. Vous remarquez que la swap n’est pas vide et pourtant pratiquement la moitié de la mémoire est gâchée sur ce système. Pourquoi ?

  • D’abord les espaces « Cached » et « Buffers » sont des espaces qui servent de tampon mémoire pour les fichiers et les accès en mode caractère. Ces espaces peuvent être réclamés a 100% sans impacter Oracle (du moins, si vous ne bénéficiez pas de ces caches pour vos datafiles, i.e filesystemio_options est positionné à directio ou setall ou que vous utilisiez RAC !)
  • Ensuite les Huge Pages sont toujours allouées et portant ici environ 2 Go sont inutilisés (1087 pages de 2Mo chacune).

Bon mais tout ça vous le savez sans doute… alors qu’est-ce que vous pouvez peut-être apprendre de ce post ? Et bien :

  • http://linux-mm.org/LinuxMM est un wiki très intéressant qui pointent sur de nombreux aspects de la gestion de la mémoire de Linux
  • /proc/sys/vm/drop_caches permet de vider les caches memoire de Linux ; D’après la doc à partir d’un kernel 2.6.16 mais qui est présent sur mon RHEL4U6 (2.6.9-67.ELsmp). Bon, ca fonctionne sur Ubuntu Gibbon-Gutsy mais de la à jouer avec ça en prod !
  • /proc/slabinfo (man slabinfo) et slabtop (man slabtop) permettent de visualiser les informations sur l’utilisation de plusieurs structures par le noyau et notamment les inodes.

Alors disons que c’est un début. A vous de prendre le relais…