Mémoire fantôme sous Linux

Memory leak ?

a marqué ce sujet comme résolu.

Bonjour,

J’ai, depuis plusieurs semaines, un problème de mémoire sur mon PC portable professionnel, sous Arch Linux.

Ce PC dispose de 4 Gio de RAM, et sature régulièrement. En cherchant l’origine du problème, je suis tombé sur une situation que je n’avais encore jamais rencontré : il y a plus de RAM consommée que ce qu’il devrait.

Je suis donc à environ 80–90 % de RAM consommée, mais en additionnant la consommation des différents processus, j’atteins à peine 20–25 % de ma capacité de RAM.

Bien entendu, je ne compte pas le cache ou les buffers, je parle bien de la mémoire réellement consommée. Le PC freeze et commence à utiliser la swap.

Habituellement, quand un soft déraille et souffre d’une fuite de mémoire, on le voit dans htop ou avec ps, au moins sur sa mémoire virtuelle délirante ou sur la mémoire consommée représentant la majorité de la consommation.

Là je n’ai rien qui explique la consommation. Avez-vous déjà rencontré le problème, ou un moyen de connaître l’origine de la consommation « fantôme » de RAM ?

Merci,
Breizh.

+0 -0

@SpaceFox : j’additionne le pourcentage de mémoire indiqué par ps (pas très fiable), et les valeurs de la colonne RES de htop (pas extrêmement fiable non plus). J’ai pas de moyen véritablement fiable de mesurer « à la main », mais c’est pas normal, même approximativement, la différence de mémoire utilisée est énorme.

Et sur un environnement très similaire sur mon PC perso (seul le matos diffère, et quelques applis en moins sur le pro), je consomme entre 1,5 et 3 Gio de RAM dans des conditions bien plus gourmandes en mémoire (Steam et Variety en plus, client mail à peu près aussi chargé, même logiciels utilisés au quotidien…). Cela me conforte dans le fait de me dire que c’est pas normal de bouffer les 4 Gio de RAM avec l’utilisation que j’en fait.

@backmachine : l’environnement de bureau est custom, basé sur i3wm pour les fenêtres, dunst pour les notifications, et URxvt pour le terminal (en mode daemon + clients). De plus, j’utilise très peu de GUI (Firefox, Claws-Mail et parfois LibreOffice, en gros, le plus souvent je suis en CLI/TUI).

+0 -0

Salut,

Mmm… As-tu essayé un memtest pour vérifier si ta RAM n’est pas endommagée par endroit ? Sinon, tu peux avoir des statistiques normalement fiables sur l’utilisation de ta RAM via la commande vmstat. Par exemple avec vmstat -s -S M.

+2 -0

Le problème ne semble pas se reproduire. J’ai bien eu un raté, mais c’était Firefox (c’est pas normal d’ailleurs, avant il tournait bien même sur 1 ou 2 Gio de RAM, là il en bouffait plus de 2, faudra qu’on m’explique ce qu’ils ont fichu chez Mozilla :D ).

Je ne connaissais pas vmstat, je tâcherais de l’utiliser si le problème daigne se reproduire.

+0 -0

Ah ben il suffisait que j’en parle :D . Pour m’assurer que je ne suis pas fou, voici les sorties de vmstat et ps, lancés en root (via sudo), et trié par utilisation de mémoire pour ps :

         3344 M mémoire totale
         2067 M mémoire utilisée
          194 M mémoire active
          228 M mémoire inactive
          883 M mémoire libre
           24 M mémoire tampon
          368 M mémoire échange
         4095 M échange total
          162 M échange utilisé
         3933 M partition d'échange libre
      1447173 tics du cpu utilisateur non-courtois
          310 tics cpu utilisateur courtois
       361404 tics cpu système
      5416360 tics cpu inactif
       702862 tics cpu attente E/S
        27954 tics cpu IRQ
        17163 tics cpu IRQ soft
            0 tics cpu volés
     13087534 pages lues depuis le disque
      8884274 pages écrites sur le disque
      1144253 pages mises en mémoire d'échange
      1555552 pages sorties de la mémoire d'échange
     32209986 interruptions
    107651546 changements de contexte CPU
   1540277684 heure d'amorçage
       504933 clonages
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
breizh    1098  4.6  0.9 387300 32936 tty1     Sl   08:55  15:28 /usr/lib/Xorg -nolisten tcp :0 vt1 -keeptty -auth /tmp/serverauth.OW5WKISyex
breizh    1127  0.9  0.8 579416 29736 ?        Sl   08:56   3:02 claws-mail --online
breizh    1117  0.0  0.4 310304 15392 ?        S    08:56   0:10 urxvtd
root       393  0.0  0.3 132124 13156 ?        Ds   08:55   0:01 /usr/lib/systemd/systemd-journald
breizh   22144  1.4  0.2  85984  7516 pts/0    Ss   14:28   0:00 fish
breizh   15928  0.0  0.2 233448  7468 pts/1    Ss+  14:25   0:00 fish
breizh    1123  0.0  0.1 546168  6776 ?        Sl   08:56   0:02 nm-applet
polkitd    553  0.3  0.1 1997876 6768 ?        Ssl  08:55   1:15 /usr/lib/polkit-1/polkitd --no-debug
breizh   22287  4.0  0.1  14300  6700 ?        S    14:28   0:00 /usr/bin/perl /home/breizh/.i3blocks/cpu_usage
breizh    1455  3.4  0.1 1165180 6640 ?        Sl   08:56  11:22 conky
breizh    1286  3.3  0.1 1165176 6620 ?        Sl   08:56  11:08 conky
root     22313  0.0  0.1  47380  6048 pts/0    S+   14:28   0:00 sudo ps aux --sort %mem
breizh    1206  0.0  0.1 471900  5560 ?        Ssl  08:56   0:09 /usr/bin/pulseaudio --daemonize=no
breizh    1105  0.0  0.1  69708  5532 tty1     S    08:56   0:14 i3
root       515  0.4  0.1 656528  4820 ?        Ssl  08:55   1:31 /usr/bin/NetworkManager --no-daemon
root     22316  0.0  0.0  17032  3248 pts/0    R+   14:28   0:00 ps aux --sort %mem
breizh    1138  1.2  0.0  55048  2796 ?        S    08:56   4:04 i3bar --bar_id=bar-0 --socket=/run/user/1000/i3/ipc-socket.1105
breizh    6848  0.0  0.0 255024  2212 ?        SLl  09:14   0:00 /usr/bin/gnome-keyring-daemon --start --foreground --components=secrets
root         1  0.0  0.0 215728  2028 ?        Ss   08:54   0:12 /sbin/init
breizh    1454  1.4  0.0 473108  1800 ?        Ssl  08:56   4:49 /usr/bin/dunst
breizh    1121  0.0  0.0 345548  1760 ?        Sl   08:56   0:00 /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
breizh    1112  0.0  0.0  12580  1520 ?        Ss   08:56   0:01 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
breizh    1449  0.0  0.0 188008  1500 ?        Sl   08:56   0:03 /usr/lib/at-spi2-registryd --use-gnome-session
dbus       513  0.3  0.0  12916  1376 ?        Ss   08:55   1:10 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
breizh    1164  0.0  0.0 310668  1368 ?        SLs  08:56   0:00 /usr/bin/gpg-agent --supervised
breizh    1140  0.0  0.0   2312   744 ?        S    08:56   0:15 i3blocks
breizh   22302  0.0  0.0   5304   716 ?        S    14:28   0:00 mpstat 1 1
root       514  0.0  0.0  50348   268 ?        Ss   08:55   0:00 /usr/lib/systemd/systemd-logind
root       401  0.0  0.0  65884   264 ?        Ss   08:55   0:01 /usr/lib/systemd/systemd-udevd
breizh    1376  0.0  0.0 254420   248 ?        Ssl  08:56   0:00 /usr/lib/gvfsd
root       516  0.0  0.0   8432   216 ?        Ss   08:55   0:00 /usr/bin/crond -n
breizh    1447  0.0  0.0  12144   132 ?        S    08:56   0:00 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
breizh    1036  0.0  0.0  60300   120 ?        Ss   08:55   0:00 /usr/lib/systemd/systemd --user
root       591  0.0  0.0  20524   100 ?        Ss   08:55   0:02 /usr/bin/wpa_supplicant -u
breizh    1435  0.0  0.0 320288    80 ?        Ssl  08:56   0:00 /usr/lib/at-spi-bus-launcher
breizh    1043  0.0  0.0   9104     8 tty1     Ss+  08:55   0:00 /bin/sh /usr/bin/startx
breizh    1400  0.0  0.0 325760     4 ?        Sl   08:56   0:00 /usr/lib/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
breizh    1037  0.0  0.0 251748     4 ?        S    08:55   0:00 (sd-pam)
breizh   31674  0.0  0.0 315496     0 ?        SLl  09:10   0:00 scdaemon --multi-server
root     27699  0.1  0.0      0     0 ?        I<   13:58   0:02 [kworker/u17:0-kcryptd]
root     27006  0.0  0.0      0     0 ?        I    13:27   0:00 [kworker/u16:4-events_unbound]
root     25574  0.0  0.0      0     0 ?        I    09:20   0:01 [kworker/1:2-events]
root     22315  0.0  0.0      0     0 ?        I    13:56   0:00 [kworker/3:2-cgroup_destroy]
root     19888  0.0  0.0      0     0 ?        I    14:27   0:00 [kworker/2:1-events]
root     19842  0.1  0.0      0     0 ?        I<   11:36   0:18 [kworker/u17:4-kcryptd]
root     16931  0.2  0.0      0     0 ?        I<   12:19   0:19 [kworker/u17:1-kcryptd]
root     16011  0.1  0.0      0     0 ?        I<   14:08   0:02 [kworker/u17:3-kcryptd]
root     14240  0.0  0.0      0     0 ?        I    14:07   0:00 [kworker/2:2-events]
root     13898  0.0  0.0      0     0 ?        I    13:05   0:00 [kworker/0:1-mm_percpu_wq]
root     12853  0.2  0.0      0     0 ?        I<   12:13   0:19 [kworker/u17:2-kcryptd]
root      9581  0.0  0.0      0     0 ?        I    10:59   0:01 [kworker/1:1-events]
root      6458  0.0  0.0      0     0 ?        I    13:47   0:00 [kworker/3:1-events]
root      5647  0.0  0.0      0     0 ?        I    14:19   0:00 [kworker/2:0]
root      4030  0.0  0.0      0     0 ?        I    14:19   0:00 [kworker/u16:0-events_unbound]
root      4018  0.0  0.0      0     0 ?        I    14:02   0:00 [kworker/u16:1-events_unbound]
breizh    1579  0.0  0.0 272148     0 ?        Sl   08:56   0:00 /usr/lib/pulse/gsettings-helper
rtkit     1207  0.0  0.0 160712     0 ?        SNsl 08:56   0:00 /usr/lib/rtkit-daemon
root      1102  0.0  0.0   2296     0 tty1     S    08:56   0:00 xf86-video-intel-backlight-helper intel_backlight
root      1101  0.0  0.0      0     0 ?        I<   08:56   0:00 [i915-userptr-re]
breizh    1097  0.0  0.0   7904     0 tty1     S+   08:55   0:00 xinit /home/breizh/.xinitrc -- /etc/X11/xinit/xserverrc :0 vt1 -keeptty -auth /tmp/serverauth.OW5WKISyex
root      1027  0.0  0.0  46908     0 ?        Ss   08:55   0:00 login -- breizh
root      1007  0.0  0.0      0     0 ?        S    08:55   0:00 [cifsd]
root      1006  0.0  0.0      0     0 ?        S    08:55   0:00 [cifsd]
root      1005  0.0  0.0      0     0 ?        S    08:55   0:00 [cifsd]
root      1004  0.0  0.0      0     0 ?        S    08:55   0:00 [cifsd]
root       994  0.0  0.0      0     0 ?        I<   08:55   0:00 [cifsoplockd]
root       993  0.0  0.0      0     0 ?        I<   08:55   0:00 [cifsiod]
root       506  0.0  0.0      0     0 ?        I<   08:55   0:00 [ext4-rsv-conver]
root       505  0.0  0.0      0     0 ?        S    08:55   0:00 [jbd2/sda1-8]
root       504  0.0  0.0      0     0 ?        I<   08:55   0:00 [ext4-rsv-conver]
root       503  0.0  0.0      0     0 ?        S    08:55   0:01 [jbd2/dm-3-8]
root       490  0.0  0.0      0     0 ?        I    12:44   0:00 [kworker/0:2-events]
root       443  0.0  0.0      0     0 ?        I<   08:55   0:00 [cfg80211]
root       436  0.0  0.0      0     0 ?        S    08:55   0:00 [i915/signal:6]
root       435  0.0  0.0      0     0 ?        S    08:55   0:00 [i915/signal:2]
root       434  0.0  0.0      0     0 ?        S    08:55   0:00 [i915/signal:1]
root       433  0.0  0.0      0     0 ?        S    08:55   0:00 [i915/signal:0]
root       421  0.0  0.0      0     0 ?        I<   08:55   0:00 [kmemstick]
root       420  0.0  0.0      0     0 ?        S    08:55   0:00 [irq/47-mei_me]
root       395  0.0  0.0 154028     0 ?        Ss   08:55   0:00 /usr/bin/lvmetad -f
root       362  0.0  0.0      0     0 ?        I<   08:54   0:00 [ext4-rsv-conver]
root       361  0.0  0.0      0     0 ?        S    08:54   0:00 [jbd2/dm-2-8]
root       325  0.0  0.0      0     0 ?        I<   08:54   0:00 [kdmflush]
root       322  0.0  0.0      0     0 ?        I<   08:54   0:00 [kdmflush]
root       320  0.0  0.0      0     0 ?        I<   08:54   0:00 [kdmflush]
root       315  0.0  0.0      0     0 ?        S    08:54   0:04 [dmcrypt_write]
root       314  0.0  0.0      0     0 ?        I<   08:54   0:00 [kcryptd]
root       311  0.0  0.0      0     0 ?        I<   08:54   0:00 [kcryptd_io]
root       309  0.0  0.0      0     0 ?        I<   08:54   0:00 [kdmflush]
root       268  0.0  0.0      0     0 ?        I<   08:54   0:00 [kworker/2:1H-kblockd]
root       235  0.0  0.0      0     0 ?        I<   08:54   0:00 [kworker/1:1H-kblockd]
root       219  0.0  0.0      0     0 ?        S    08:54   0:01 [usb-storage]
root       218  0.0  0.0      0     0 ?        I<   08:54   0:00 [scsi_tmf_4]
root       217  0.0  0.0      0     0 ?        S    08:54   0:00 [scsi_eh_4]
root       216  0.0  0.0      0     0 ?        I<   08:54   0:00 [kworker/3:1H-kblockd]
root       215  0.0  0.0      0     0 ?        I<   08:54   0:00 [kworker/0:1H-kblockd]
root       207  0.0  0.0      0     0 ?        I<   08:54   0:00 [scsi_tmf_3]
root       206  0.0  0.0      0     0 ?        S    08:54   0:00 [scsi_eh_3]
root       205  0.0  0.0      0     0 ?        I<   08:54   0:00 [scsi_tmf_2]
root       204  0.0  0.0      0     0 ?        S    08:54   0:00 [scsi_eh_2]
root       202  0.0  0.0      0     0 ?        I<   08:54   0:00 [scsi_tmf_1]
root       201  0.0  0.0      0     0 ?        S    08:54   0:00 [scsi_eh_1]
root       200  0.0  0.0      0     0 ?        I<   08:54   0:00 [scsi_tmf_0]
root       198  0.0  0.0      0     0 ?        S    08:54   0:00 [scsi_eh_0]
root       167  0.0  0.0      0     0 ?        I<   08:54   0:00 [ata_sff]
root       129  0.0  0.0      0     0 ?        I<   08:54   0:00 [charger_manager]
root       116  0.0  0.0      0     0 ?        I<   08:54   0:00 [kstrp]
root       107  0.0  0.0      0     0 ?        I<   08:54   0:00 [ipv6_addrconf]
root       106  0.0  0.0      0     0 ?        I<   08:54   0:00 [nvme-delete-wq]
root       105  0.0  0.0      0     0 ?        I<   08:54   0:00 [nvme-reset-wq]
root       104  0.0  0.0      0     0 ?        I<   08:54   0:00 [nvme-wq]
root       103  0.0  0.0      0     0 ?        I<   08:54   0:00 [acpi_thermal_pm]
root       102  0.0  0.0      0     0 ?        I<   08:54   0:00 [kthrotld]
root        61  0.1  0.0      0     0 ?        S    08:54   0:38 [kswapd0]
root        59  0.0  0.0      0     0 ?        S    08:54   0:00 [watchdogd]
root        58  0.0  0.0      0     0 ?        I<   08:54   0:00 [devfreq_wq]
root        57  0.0  0.0      0     0 ?        I<   08:54   0:00 [edac-poller]
root        54  0.0  0.0      0     0 ?        I<   08:54   0:00 [kblockd]
root        53  0.0  0.0      0     0 ?        I<   08:54   0:00 [kintegrityd]
root        52  0.0  0.0      0     0 ?        I<   08:54   0:00 [crypto]
root        51  0.0  0.0      0     0 ?        SN   08:54   0:00 [khugepaged]
root        50  0.0  0.0      0     0 ?        SN   08:54   0:00 [ksmd]
root        49  0.0  0.0      0     0 ?        S    08:54   0:00 [kcompactd0]
root        48  0.0  0.0      0     0 ?        I<   08:54   0:00 [writeback]
root        47  0.0  0.0      0     0 ?        S    08:54   0:00 [oom_reaper]
root        46  0.0  0.0      0     0 ?        S    08:54   0:00 [khungtaskd]
root        42  0.0  0.0      0     0 ?        S    08:54   0:00 [kauditd]
root        41  0.0  0.0      0     0 ?        S    08:54   0:00 [rcu_tasks_kthre]
root        40  0.0  0.0      0     0 ?        I<   08:54   0:00 [netns]
root        39  0.0  0.0      0     0 ?        S    08:54   0:00 [kdevtmpfs]
root        38  0.0  0.0      0     0 ?        I<   08:54   0:00 [kworker/3:0H-kblockd]
root        36  0.0  0.0      0     0 ?        S    08:54   0:02 [ksoftirqd/3]
root        35  0.0  0.0      0     0 ?        S    08:54   0:06 [rcuc/3]
root        34  0.0  0.0      0     0 ?        S    08:54   0:00 [migration/3]
root        33  0.0  0.0      0     0 ?        S    08:54   0:00 [watchdog/3]
root        32  0.0  0.0      0     0 ?        S    08:54   0:00 [cpuhp/3]
root        31  0.0  0.0      0     0 ?        I<   08:54   0:00 [kworker/2:0H]
root        29  0.0  0.0      0     0 ?        S    08:54   0:02 [ksoftirqd/2]
root        28  0.0  0.0      0     0 ?        S    08:54   0:06 [rcuc/2]
root        27  0.0  0.0      0     0 ?        S    08:54   0:00 [migration/2]
root        26  0.0  0.0      0     0 ?        S    08:54   0:00 [watchdog/2]
root        25  0.0  0.0      0     0 ?        S    08:54   0:00 [cpuhp/2]
root        24  0.0  0.0      0     0 ?        I<   08:54   0:00 [kworker/1:0H-kblockd]
root        22  0.0  0.0      0     0 ?        S    08:54   0:02 [ksoftirqd/1]
root        21  0.0  0.0      0     0 ?        S    08:54   0:06 [rcuc/1]
root        20  0.0  0.0      0     0 ?        S    08:54   0:00 [migration/1]
root        19  0.0  0.0      0     0 ?        S    08:54   0:00 [watchdog/1]
root        18  0.0  0.0      0     0 ?        S    08:54   0:00 [cpuhp/1]
root        17  0.0  0.0      0     0 ?        S    08:54   0:00 [cpuhp/0]
root        16  0.0  0.0      0     0 ?        S    08:54   0:00 [watchdog/0]
root        15  0.0  0.0      0     0 ?        S    08:54   0:00 [migration/0]
root        14  0.0  0.0      0     0 ?        S    08:54   0:00 [rcub/0]
root        13  0.0  0.0      0     0 ?        S    08:54   0:06 [rcuc/0]
root        12  0.0  0.0      0     0 ?        I    08:54   0:00 [rcu_bh]
root        11  0.0  0.0      0     0 ?        I    08:54   0:03 [rcu_sched]
root        10  0.0  0.0      0     0 ?        I    08:54   0:07 [rcu_preempt]
root         9  0.0  0.0      0     0 ?        S    08:54   0:02 [ksoftirqd/0]
root         8  0.0  0.0      0     0 ?        I<   08:54   0:00 [mm_percpu_wq]
root         6  0.0  0.0      0     0 ?        I<   08:54   0:00 [kworker/0:0H-kblockd]
root         4  0.0  0.0      0     0 ?        I<   08:54   0:00 [rcu_par_gp]
root         3  0.0  0.0      0     0 ?        I<   08:54   0:00 [rcu_gp]
root         2  0.0  0.0      0     0 ?        S    08:54   0:00 [kthreadd]

On peut voir que 2 Gio de RAM sont utilisés d’après vmstat, mais ça ne correspond pas avec ce que ps indique… si quelqu’un voit d’où viens le problème… (d’après le memtest la RAM a l’air en bon état).

+0 -0

Mmm… Une première piste que j’explorerais ce sont les IPCs et plus précisément les zones de mémoire partagées. Si je ne dis pas de bêtises, elles ne doivent pas être comptabilisées. Que te retourne la commande ipcs -m --human (à adapter si les options ne sont pas disponibles chez toi) ?

+0 -0

Désolé pour le délai, mais il faut que le problème se présente à nouveau et que j’ai le temps d’investiguer (en général je reboot pour reprendre le boulot au plus vite).

Voici le retour de ipcs -m --human durant une instance du problème :

------ Segment de mémoire partagée --------
clef       shmid      propriétaire perms      taille     nattch     états      
0x00000000 9961472    breizh 600          512K     2          dest         
0x00000000 9240577    breizh 600            1M     2          dest         
0x00000000 9273346    breizh 600          384K     2          dest         
0x00000000 9404420    breizh 600          384K     2          dest         
0x00000000 9437189    breizh 600            4M     2          dest  

À ce moment-là, 3.0 Gio de RAM sont utilisés alors que les processus ne consomment que 500 Mio de mémoire, en apparence…

+0 -0

Tu peux aussi jeter un œil aux partitions montées en mémoire avec df -h.

Car en effet le contenu de ces répertoires ou points de montages sont entièrement en RAM. C’est souvent le cas de /tmp par exemple et quelques autres.

Et certaines applications peut écrire abusivement dedans. ;)

+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte