• # mémoire virtuelle != mémoire physique

    Posté par . En réponse au message Mesure incohérente de consommation mémoire. Évalué à 3.

    La différence entre free et /proc/pid/status vient du fait que free donne des informations sur la mémoire physique alors que Vm{Peak,Size} donnent des informations sur la mémoire virtuelle.
    Un processus peut avoir réservé bien plus de mémoire qu'il n'y a de mémoire physique sur le système. Ce n'est pas un problème tant qu'il ne s'en sert pas. S'il s'en sert alors le système finira par swapper ou le processus sera tué.
    Ce phénomène peut se produire dans le cas d'un programme qui contient "beaucoup" de threads. Si c'est ton cas, tu peux essayer de réduire la taille de la stack des threads. Par défaut, la glibc réserve 8MB pour la stack de chaque thread dans l'espace mémoire du processus père. Sauf cas particulier, avec 32kB ça devrait fonctionner sans problème.
    Voir man setrlimit (global) ou man pthread_attr_setstacksize (par thread).
    En même temps, si cela vient des threads, la mémoire ne sera pas utilisée donc tu ne devrait pas avoir de pb. Sauf si tu créer trop de thread et que tu atteins la limite de l'espace virtuel (déjà vu!).