À quoi vous êtes-vous /proc/sys/vm/overcommit_memory
fixé? De la documentation du noyau:
0 - Heuristic overcommit handling. Obvious overcommits of
address space are refused. Used for a typical system. It
ensures a seriously wild allocation fails while allowing
overcommit to reduce swap usage. root is allowed to
allocate slightly more memory in this mode. This is the
default.
1 - Always overcommit. Appropriate for some scientific
applications.
2 - Don't overcommit. The total address space commit
for the system is not permitted to exceed swap + a
configurable percentage (default is 50) of physical RAM.
Depending on the percentage you use, in most situations
this means a process will not be killed while accessing
pages but will receive errors on memory allocation as
appropriate.
Ainsi, si vous utilisez 1, il n'y a pas de différence. Si vous utilisez 2 et aucun fichier d'échange Linux, aucun processus ne pourra allouer 512 Mo de mémoire (virtuelle). Le résultat n'est pas clair pour 0.
Modifier: à partir de http://utcc.utoronto.ca/~cks/space/blog/linux/LinuxVMOvercommit, voici comment fonctionne 0:
Le sur-engagement heuristique tente de déterminer la quantité de mémoire que le système pourrait vous donner s'il récupérait toute la mémoire qu'il pouvait et qu'aucun autre processus n'utilisait plus de RAM qu'il ne l'est actuellement; si vous demandez plus que cela, votre allocation est refusée. En particulier, le nombre théorique de «mémoire libre» est calculé en ajoutant de l'espace de swap gratuit, de la RAM libre (moins 1 / 32e si vous n'êtes pas root) et tout l'espace utilisé par le cache de tampon unifié et les données de noyau étiquetées comme récupérables. (moins quelques pages réservées).
Il utilise donc également l'échange dans le calcul. En général, je suivrais la recommandation RHEL de:
M = Amount of RAM in GB, and S = Amount of swap in GB, then
If M < 2
S = M *2
Else
S = M + 2