web-dev-qa-db-ja.com

共有メモリはギガバイトかかります

不明なエンティティによるRAMの大量消費に問題があります。 topにはリストされていませんが、使用可能なメモリ量は時間とともに減少し、すべてのプログラムをオフにしても何も起こりません。現在、3.6 GiBですが、徐々に悪化しています。おそらくその結果、システムは多くのメモリをスワップアウトすることができず、約1.5 GiBのメモリをスワップアウトした後、スラッシングに進みます。

この結果を得るためにfree -mコマンドを使用しました:

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

共有メモリは3.5ギガバイトかかるようです。

これは、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/にはこれが含まれていますが、実際には共有メモリ内の何かのようです。

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

ただし、ipcs --humanを使用して共有メモリ内のものを一覧表示すると、削除されたメモリが数百メガバイトしか取得できません。

------ 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     

ipcs -m | awk '{sum+=$5} END{print sum}'を使用すると、366790104バイト(366 MB)があると表示されます。これは、占有しているものよりはるかに少ないです。

17.04にアップグレードしたUbuntu 16.04を使用しています。問題は、アップグレード前にすでに存在していました。私がほとんど常に使用しているプログラムは、QtCreator、Vivaldi、evince、gcc、およびgnome Shell、nautilus、geditなどの通常のプログラムです。

メモリがスワップアウトされることはありません。原因を特定したり、1日に1回だけ削除したり、強制的にスワップしたりする方法をGoogleで検索することはできません。何が問題になる可能性がありますか?

編集:私はそれが知られていない理由で約120メガバイトのメモリを消費するのを見ました。問題を引き起こしているのではないかと疑っていたため、その時点でVivaldi(共有メモリを大量に使用する)をシャットダウンしました。そのとき私がしたことは、最後の再起動後に初めてFirefoxを開いたことだけです(ギガバイトがいっぱいになる前に実行しなかったため、Firefoxだけでは原因になりません)。

編集#2:Xサーバーを再起動すると共有メモリから内容が削除されますが、Xサーバーはまさに再起動したくないものであるため、それは解決策ではありません(gnome-Shell --replaceは役に立ちません)。共有メモリに関するレッスンを正しく覚えている場合、これはメモリがXサーバーまたはGnome-Shellに関連する何かによって取得され、終了時に正しく解放されますが、実行中に決して消去されないことを意味します(何らかの破損したガベージコレクション? )。

編集#3:これはこれに関連するのだろうか: https://github.com/mpv-player/mpv/issues/3931

2
Dugi

たぶん、smemstatがメモリホガーを表示するでしょう。つかいます:

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