• [^] # Re: attention à l'overcommitting

    Posté par . En réponse au message Erreur "Cannot allocate memory" généralisée. Évalué à 2.

    vm.overcommit_memory = 2
    vm.overcommit_ratio = 100

    Ce n'est pas les paramètres par défaut, j'avais appliqué ces changements en me basant sur les recommandations du livre "Postgresql 9.0 High Performance".


    Cela désactive l'overcommiting, cela signifie que le noyau n'allouera pas plus de SWAP + 100% RAM = SWAP + RAM. Sans cela, malloc peut renvoyer une adresse valide (i.e. pas NULL), mais l'OOM-killer se mettra en branle au moment où elle touchera les pages.

    /proc/meminfo:
    Committed_AS: 18687308 kB

    Ça fait 17Go, mais que représente cette ligne ?



    La mémoire réellement allouée. Le problème c'est que la valeur reportée par free (même en prenant en compte buffer/cache) est à peu près aussi fiable que madame Soleil : par exemple, sur certains noyaux, avec un FS ext3 monté avec data=ordered, si tu supprimes un fichier alors qu'il est ouvert, le taille reportée du page cache diminue, mais pas la mémoire free.
    Un autre problème, c'est que tant que la page n'a pas été touchée par l'application, elle ne sera pas reportée comme utilisée.
    Committed_AS est la quantité de mémoire qui a été réellement allouée par le noyau.
    Il serait bien de faire un "watch cat /proc/meminfo" pendant que tu es en charge...