web-dev-qa-db-fra.com

La mémoire partagée prend des giga-octets

J'ai des problèmes de consommation importante de RAM par une entité inconnue. Il n'est pas répertorié dans top, mais la quantité de mémoire disponible diminue avec le temps et la désactivation de tous les programmes n'a aucun effet. Actuellement, la taille est de 3,6 Gio, mais la situation empire lentement. En conséquence, le système ne parvient probablement pas à échanger une grande quantité de mémoire. Après avoir échangé environ 1,5 GiB de mémoire, il passe à la compression.

J'ai utilisé la commande free -m pour obtenir ce résultat:

              total        used        free      shared  buff/cache   available
Mem:           7875        3517         388        3595        3969         481
Swap:          9536         500        9036

Il semble que la mémoire partagée prend 3,5 gigaoctets.

Voici ce que je reçois quand je lance df -h:

udev                 3,9G     0  3,9G   0% /dev
tmpfs                788M   80M  709M  11% /run
/dev/sdb6             23G   18G  4,1G  81% /
tmpfs                3,9G  168M  3,7G   5% /dev/shm
tmpfs                5,0M  4,0K  5,0M   1% /run/lock
tmpfs                3,9G     0  3,9G   0% /sys/fs/cgroup
/dev/sdb1            356M   76M  281M  22% /boot/efi
/dev/sdb8             37G   33G  2,0G  95% /home
/dev/sda2            746G  269G  477G  37% /data
/dev/sda3            184G  132G   43G  76% /lindata
tmpfs                788M   84K  788M   1% /run/user/1000
/home/dugi/.Private   37G   33G  2,0G  95% /home/dugi

/proc/meminfo/ contient ceci, il semble que ce soit vraiment quelque chose en mémoire partagée:

MemTotal:        8064776 kB
MemFree:          318880 kB
MemAvailable:     493992 kB
Buffers:           36784 kB
Cached:          3960388 kB
SwapCached:        32776 kB
Active:          3732236 kB
Inactive:        3539036 kB
Active(anon):    3562316 kB
Inactive(anon):  3381848 kB
Active(file):     169920 kB
Inactive(file):   157188 kB
Unevictable:         732 kB
Mlocked:             732 kB
SwapTotal:       9765884 kB
SwapFree:        9253044 kB
Dirty:               516 kB
Writeback:             0 kB
AnonPages:       3269552 kB
Mapped:           493840 kB
Shmem:           3670056 kB
Slab:             264136 kB
SReclaimable:     136840 kB
SUnreclaim:       127296 kB
KernelStack:       23296 kB
PageTables:        82464 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    13798272 kB
Committed_AS:   20782644 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:    831488 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:     1783952 kB
DirectMap2M:     6498304 kB
DirectMap1G:           0 kB

Cependant, lorsque je liste les éléments stockés dans la mémoire partagée à l'aide de ipcs --human, je n'obtiens que quelques centaines de mégaoctets de mémoire supprimée:

------ Message Queues --------
key        msqid      owner      perms      size         messages    

------ Shared Memory Segments --------
key        shmid      owner      perms      size       nattch     status      
0x00000000 268959744  dugi       600        386,8K     2          dest         
0x00000000 265879554  dugi       600          512K     2          dest         
0x00000000 557059     dugi       600           16M     2          dest         
0x00000000 6258692    dugi       600            1K     2          dest         
0x00000000 271974405  dugi       600          512K     2          dest         
0x00000000 31784966   dugi       600           16M     2          dest         
0x00000000 819207     dugi       600           16M     2          dest         
0x00000000 274464776  dugi       600          512K     2          dest         
0x00000000 28704777   dugi       600          512K     2          dest         
0x00000000 274694154  dugi       600          512K     2          dest         
0x00000000 264372236  dugi       600          512K     2          dest         
0x00000000 272465933  dugi       600            4M     2          dest         
0x00000000 145522702  dugi       600           16M     2          dest         
0x00000000 274563088  dugi       600          7,6M     2          dest         
0x00000000 113934353  dugi       600           74K     2          dest         
0x00000000 215908370  dugi       600         66,2K     2          dest         
0x00000000 35913747   dugi       600          512K     2          dest         
0x00000000 274595860  dugi       600          7,6M     2          dest         
0x00000000 149946389  dugi       600          512K     2          dest         
0x00000000 273842198  dugi       600          128M     2          dest         
0x00000000 115015703  dugi       600         29,3K     2          dest         
0x00000000 150044696  dugi       600           64M     2          dest         
0x00000000 143425561  dugi       600         32,5K     2          dest         
0x00000000 150011930  dugi       600            1M     2          dest         
0x00000000 149749788  dugi       600          512K     2          dest         
0x00000000 149848094  dugi       600           64M     2          dest         
0x00000000 149815327  dugi       600            1M     2          dest         
0x00000000 166363168  dugi       700          2,2M     2          dest         
0x00000000 166395937  dugi       600          384K     2          dest         
0x00000000 166428706  dugi       600          512K     2          dest         
0x00000000 166461475  dugi       700         53,5K     2          dest         
0x00000000 166625316  dugi       700        376,6K     2          dest         
0x00000000 166658088  dugi       700         13,5K     2          dest         
0x00000000 166690857  dugi       700         88,7K     2          dest         

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     

Si j'utilise ipcs -m | awk '{sum+=$5} END{print sum}', cela signifie qu'il y a 366790104 octets, soit 366 Mo. C'est beaucoup moins que ce qu'il occupe.

J'utilise Ubuntu 16.04 mis à niveau vers 17.04. Le problème existait déjà avant la mise à niveau. Les programmes que j'utilise presque constamment sont QtCreator, Vivaldi, evince, gcc, et les programmes habituels tels que gnome Shell, nautilus ou gedit.

La mémoire n'est jamais remplacée, je ne peux pas trouver sur Google une cause ou la supprimer une fois par jour, ni l'échanger de force, mais je ne veux pas redémarrer mon ordinateur plusieurs fois par semaine. Des idées ce qui peut être le problème?

EDIT: Je l'ai vu aspirer environ 120 mégaoctets de mémoire sans raison connue. Vivaldi (qui utilise beaucoup la mémoire partagée) a été arrêté à ce moment-là parce que je le soupçonnais de causer le problème. La seule chose que j'ai faite à ce moment-là est que Firefox a été ouvert pour la première fois après le dernier redémarrage (Firefox seul ne peut en être la cause car je ne l'ai pas exécuté avant que ces gigaoctets n'aient été remplis).

EDIT # 2: Le redémarrage du serveur X supprime les éléments de la mémoire partagée, mais ce n'est pas une solution, car le serveur X est exactement ce que je ne veux pas redémarrer (gnome-Shell - le remplacement n'aide pas ). Si je me souviens correctement des leçons sur la mémoire partagée, cela signifie que la mémoire est capturée par un élément lié au serveur X ou à Gnome-Shell qui la libère correctement à la sortie, mais ne l'efface jamais lors de l'exécution (une sorte de ramasse-miettes cassé?). ).

Edit # 3: Je me demande si c'est lié à ceci: https://github.com/mpv-player/mpv/issues/3931

2
Dugi

Peut-être que smemstat montrera la mémoire pige (s). Utilisation:

Sudo apt-get install smemstat
Sudo smemstat
2
Colin Ian King