LINUX.ORG.RU

Linux ate my RAM - 2

 , , , ,


3

3

Имею такую ситуацию:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:          64290       17887       17917       18909       28485       26785
Swap:         24147       21572        2575

При этом в топе всего штук 50 процессов с потреблением памяти больше 10 Мб, и они вместе съели максимум 5 Гб памяти. Всего процессов штук 500, и не похоже чтобы лишние гигабайты были размазаны по ним тонким слоем. Отдельный вопрос про своп: неужели все это память, выделенная каким-то процессам? Где-то же должно быть написано кто это все сожрал.

Где память?

Fedora 31, kernel-5.8.18, KDE



Последнее исправление: Zeta_Gundam (всего исправлений: 1)

Надо сказать, что возникает такая ситуация примерно спустя неделю аптайма, перемежаемого suspend to RAM, поэтому сложно сказать как это воспроизвести.

Zeta_Gundam
() автор топика
Ответ на: комментарий от gremlin_the_red

Своп:

$ smem | awk '{sum+=$4;} END {print sum;}'
366960

UPD: пардон, это ерунда посчиталась. Еще раз:

$ sudo smem -c swap | awk '{sum+=$1;} END {print sum;}'
1404796
Zeta_Gundam
() автор топика
Последнее исправление: Zeta_Gundam (всего исправлений: 2)
Ответ на: комментарий от utanho
$ cat /etc/fstab
UUID=fd375ed4-1633-451d-9e90-5521a70118bc /                       btrfs   subvol=root     0 0
UUID=1d12f080-84fe-4a91-9894-5611b477f64b /boot                   ext4    defaults        1 2
UUID=7F7E-91AD                            /boot/efi               vfat    umask=0077,shortname=winnt 0 2
UUID=fd375ed4-1633-451d-9e90-5521a70118bc /home                   btrfs   subvol=home00   0 0
UUID=35f7fe42-0dc1-41e8-baf4-942c3ab264d5 none                    swap    defaults        0 0

UUID=d6b71128-9035-4c31-8aab-9663787370dc /home/user/a            ext4    defaults        0 0
UUID=a16f6096-3d2e-437a-ae72-83066947d6c7 /home/user/b            ext4    defaults        0 0
UUID=62c4d93c-1fa1-4a19-a370-13d8e12c2862 /var/lib/libvirt/images ext4    defaults        0 0
/dev/mapper/raid                          /home/user/c            auto    defaults,noauto,noatime 0 0
Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam

free и прочие *top покажут память, сожранную процесcами и приложениям. А в вашем случае это не они.

Покажите mount -a на предмет tmpfs

utanho ★★★★★
()
Последнее исправление: utanho (всего исправлений: 1)
Ответ на: комментарий от utanho

Оно?

$ mount -t tmpfs
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,seclabel)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=6583328k,mode=700,uid=1000,gid=1000)
tmpfs on /run/user/1003 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=6583328k,mode=700,uid=1003,gid=1003)
Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam

Не пробовали пробежаться по этим папкам и посмотреть содержимое?

У вас 2 тмпфс по 6.5Гб итого 13.

П.С. На предмет засирания системы логами проверили?

utanho ★★★★★
()
Ответ на: комментарий от utanho

Не пробовали пробежаться по этим папкам и посмотреть содержимое?

Когда я делаю для них du -s, получаются какие-то мизерные величины вроде пары Мб. Логов в сумме 4 Гб.

А собственно, почему

free и прочие *top покажут память, сожранную процесcами и приложениям. А в вашем случае это не они.

…? Как раз free и показывает, что своп почти закончился.

Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam

У вас своп в ОЗУ или всё же на отдельном разделе?

Я немного не точно выразился. Free в данном случае покажет общий расход памяти, без конкретики. Top покажет процессы, но дебет с кредитом может не сойтись, если память отжирают не процессы.

utanho ★★★★★
()
Последнее исправление: utanho (всего исправлений: 1)

Отдельный вопрос про своп: неужели все это память, выделенная каким-то процессам?

Ты же в курсе, что в идеале своп - это выгруженные из RAM неактивные процессы?

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

Тогда эти использованные гигабайты должны оставлять след в top, так ведь?

Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam

делаю для них du -s

du считает только файлы у которых есть имя, и он просто никак не сможет учесть файлы, которые удалены, но всё ещё открыты каким-нибудь процессом. Смотри на отчёт df.

i-rinat ★★★★★
()
Ответ на: комментарий от Zeta_Gundam

Не знал, что так бывает

Читайте про Zram

utanho ★★★★★
()
Ответ на: комментарий от i-rinat

Ага, 500 Мб нашлось, но все равно ничего такого.

$ df -ah
Filesystem      Size  Used Avail Use% Mounted on
sysfs              0     0     0    - /sys
proc               0     0     0    - /proc
devtmpfs         32G     0   32G   0% /dev
securityfs         0     0     0    - /sys/kernel/security
tmpfs            32G  552M   31G   2% /dev/shm
devpts             0     0     0    - /dev/pts
tmpfs            32G  2.2M   32G   1% /run
cgroup2            0     0     0    - /sys/fs/cgroup
pstore             0     0     0    - /sys/fs/pstore
efivarfs           0     0     0    - /sys/firmware/efi/efivars
none               0     0     0    - /sys/fs/bpf
configfs           0     0     0    - /sys/kernel/config
/dev/nvme0n1p4  441G  183G  258G  42% /
selinuxfs          0     0     0    - /sys/fs/selinux
systemd-1          0     0     0    - /proc/sys/fs/binfmt_misc
debugfs            0     0     0    - /sys/kernel/debug
mqueue             0     0     0    - /dev/mqueue
hugetlbfs          0     0     0    - /dev/hugepages
fusectl            0     0     0    - /sys/fs/fuse/connections
tmpfs            32G  8.0M   32G   1% /tmp
/dev/nvme0n1p4  441G  183G  258G  42% /home
/dev/nvme0n1p2  976M  374M  535M  42% /boot
/dev/nvme0n1p1  599M   20M  580M   4% /boot/efi
/dev/sdb1       458G  195G  240G  45% /var/lib/libvirt/images
/dev/sde1       1.8T  1.7T  2.6G 100% /home/user/a
/dev/sdg1       5.5T  3.0T  2.2T  58% /home/user/b
sunrpc             0     0     0    - /var/lib/nfs/rpc_pipefs
tmpfs           6.3G  344K  6.3G   1% /run/user/1000
/dev/fuse          0     0     0    - /run/user/1000/doc
tmpfs           6.3G   52K  6.3G   1% /run/user/1003
/dev/fuse          -     -     -    - /run/user/1003/doc
Zeta_Gundam
() автор топика
Ответ на: комментарий от bryak
$ sudo ps_mem
 Private  +   Shared  =  RAM used       Program

80.0 KiB +  33.0 KiB = 113.0 KiB       start_kdeinit (2)
...
684.8 MiB +  19.0 MiB = 703.8 MiB       plasmashell (2)
830.2 MiB + 176.8 MiB =   1.0 GiB       Web Content (8)
---------------------------------
                          6.4 GiB
=================================
$ free -m
              total        used        free      shared  buff/cache   available
Mem:          64290       18783       15536       19582       29970       25217
Swap:         24147       21569        2578
Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam
$ sudo smem -tk
  PID User     Command                         Swap      USS      PSS      RSS 
 3648 user      /usr/libexec/geoclue-2.0/de   612.0K    16.0K    34.0K     2.7M 
...
477894 user     /usr/lib64/firefox/firefox         0   334.6M   484.2M   712.8M 
347027 user     /usr/bin/telegram-desktop -        0   541.1M   559.3M   612.7M 
-------------------------------------------------------------------------------
  241 11                                       1.3G     5.3G     6.3G    13.2G 

Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam

Вся память, которая потребляется процессами отображается в ps_mem. Куда память делась остальная? Дисковый кэш

buff/cache 28485

У меня вот так: free -m

              total        used        free      shared  buff/cache   available
Mem:          32105        4774        4532         143       22798       26752
Swap:             0           0           0

Т.е свободно 4532, но htop говорит, что занято 4.78 из 31.4. Если память будет нужна, то процессы вытеснят страницы памяти, которые были выделены под дисковый кэш

Вопрос исчерпан?

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 7)
Ответ на: комментарий от bryak

Как раз с дисковым кэшем все понятно, вопрос кто занял 18 Гб занятой памяти + 21 Гб свопа. Сверху подсказывают, что наверное эта память ушла мимо процессов…

Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam

Да! Я подтверждаю, что бывает такое, что процесс заняд память, еще отъел своп и по завершению процесса не освободил и память и не разгрузил своп. У меня такое было пару раз. Но возможно, что какие-то кэши в своп улетели, а память, занятая процессом не освободилась. что htop говорит?

bryak ★★★★
()
$ oom-sort -l0
oom_score oom_score_adj  UID   PID Name            VmRSS   VmSwap
--------- ------------- ---- ----- --------------- ------- --------
       17             0 1000  5633 Web Content       503 M      0 M 
       16             0 1000 11124 firefox           476 M      0 M 
        6             0 1000  5560 Web Content       181 M      0 M 
        5             0 1000 10702 Web Content       175 M      0 M 
        5             0 1000 12673 WebExtensions     158 M      0 M 
        4             0 1000 13430 Web Content       141 M      0 M 
        4             0 1000 13651 Web Content       141 M      0 M 
        4             0 1000 15708 Web Content       132 M      0 M 
        3             0    0  1436 Xorg              108 M      7 M 

oom-sort покажет объемы всех процессов, в том числе уровень засвоппленности каждого процесса.

https://github.com/hakavlad/nohang/blob/master/src/oom-sort

https://github.com/hakavlad/nohang/blob/master/docs/oom-sort.manpage.md

Общесистемная инфа - cat /proc/meminfo.

Этого достаточно для полной диагностики.

anonymous
()
Ответ на: комментарий от Zeta_Gundam

$ cat /etc/fstab

btrfs

Вот он, скорее всего, и потек, что весь свопнулся.

Еще своп занятое не освобождает «как бы» занятое (он и так уже занял весь объем диска) без лишней необходимости, он замещает, чтобы простое освобождение памяти не тормозило.

Если принудительно очистишь своп - swapoff & swapon - скорее всего занятая памть не сильно измениться.

anonymous
()
Ответ на: комментарий от mky
$ sudo ipcs -au

------ Messages Status --------
allocated queues = 0
used headers = 0
used space = 0 bytes

------ Shared Memory Status --------
segments allocated 19
pages allocated 42223
pages resident  42223
pages swapped   0
Swap performance: 0 attempts     0 successes

------ Semaphore Status --------
used arrays = 0
allocated semaphores = 0
Zeta_Gundam
() автор топика
Ответ на: комментарий от anonymous

Общесистемная инфа - cat /proc/meminfo.

Этого достаточно для полной диагностики.

А можно поподробнее на что в нем смотреть?

$ cat /proc/meminfo
MemTotal:       65833308 kB
MemFree:         4876276 kB
MemAvailable:   17874996 kB
Buffers:           97608 kB
Cached:         32576164 kB
SwapCached:        21740 kB
Active:          6654052 kB
Inactive:       30144348 kB
Active(anon):    2804172 kB
Inactive(anon): 20880036 kB
Active(file):    3849880 kB
Inactive(file):  9264312 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:      24727548 kB
SwapFree:        2656532 kB
Dirty:               472 kB
Writeback:             0 kB
AnonPages:       4104616 kB
Mapped:          1239848 kB
Shmem:          19559584 kB
KReclaimable:     609064 kB
Slab:            1466468 kB
SReclaimable:     609064 kB
SUnreclaim:       857404 kB
KernelStack:       37712 kB
PageTables:        70696 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    57644200 kB
Committed_AS:   65177504 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       82348 kB
VmallocChunk:          0 kB
Percpu:            43264 kB
HardwareCorrupted:     0 kB
AnonHugePages:    200704 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:    64997388 kB
DirectMap2M:     2027520 kB
DirectMap1G:     1048576 kB
Zeta_Gundam
() автор топика
Ответ на: комментарий от anonymous

Если принудительно очистишь своп - swapoff & swapon - скорее всего занятая памть не сильно измениться.

Ого, прикольная команда! Своп начал освобождаться, дошел до 1 Гб, потом

$ sudo swapoff -av
swapoff /dev/nvme0n1p3
Killed

Занятая память действительно не сильно поменялась, зато упала плазма, пришлось перезапускать :)

$ free -m
              total        used        free      shared  buff/cache   available
Mem:          64290       25320        1291       36336       37678        1926
Swap:         24147        3752       20395
Zeta_Gundam
() автор топика
Последнее исправление: Zeta_Gundam (всего исправлений: 1)
Ответ на: комментарий от Zeta_Gundam

shared 36336 - у вас 35 гигабайт в tmpfs.

shared Memory used (mostly) by tmpfs (Shmem in /proc/meminfo)

скрипт oom-sort находится в пакете nohang. Доступен в федора 31:

sudo dnf install nohang

Сортировка процессов по используемому свопу:

oom-sort --sort VmSwap -l0

И по памяти: oom-sort --sort VmRSS -l0

hakavlad ★★★
()
Ответ на: комментарий от bryak

по завершению процесса не освободил и память и не разгрузил своп

Ну это вообще мистика какая-то, куда ядро смотрит?

Чуть выше по треду лежит полный выхлоп top.

Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam

У меня часто кусочное переподключение свопа снижает объё занятого в свопе. При той же загрузке оперативки разумеется. Как будто в свопе какая то фрагментация.

kirill_rrr ★★★★★
()
Ответ на: комментарий от hakavlad

Точно и абсолютно всегда? Мне казалось это процесс, у которого невозможно отобрать все зарезервированные ресурсы.

kirill_rrr ★★★★★
()
Ответ на: комментарий от hakavlad

Не обязательно tmpfs. Это также может быть память Х-сервера и видеодрайвера или fuse-драйвера фс. Ну или ещё чего то.

Кстати, я встречал подобное с драйвером exfat, он упорно держал в памяти абсолютно всё, что было записано на флешку. И ещё я слышал что то насчёт утечки памяти при использовании нескольких видеокарт nvidia и плазмы5 от друга.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)

А насколько реально на этом монстре воспользоваться классическим методом: остановить всю рабботу и завершать процессы максимально по одному и смотреть что освободится?

kirill_rrr ★★★★★
()
Ответ на: комментарий от kirill_rrr

Можно попробовать, как раз сегодня-завтра буду перезагружать когда скрипт закончит считать. А какие есть кандидаты на забой – кеды, иксы?

Zeta_Gundam
() автор топика
Ответ на: комментарий от kirill_rrr

отобрать невозможно толькр ПИД. Память у зомби вседа по нулям

hakavlad ★★★
()
Ответ на: комментарий от Zeta_Gundam

Абсолютно каждый, в конце должен или найтись виновник, или остаться голое ядро и абсолютный минимум процессов, для чистой генту это 6-8 штук. А после этого надо отмонтировать всё что можно и может быть даже повыгружать какие нибудь модули из ядра. Видеодрайвер там например.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)

Нормальной файловой системой конечно пользоваться не судьба.

bhfq ★★★★★
()
Ответ на: комментарий от kirill_rrr

Кстати, ну вот допустим я залогинюсь рутом в TTY, отмонтирую /home. А как быть с btrfs, на которой корень? И сама TTY переживет выгрузку видеодрайвера?

Zeta_Gundam
() автор топика
Ответ на: комментарий от Zeta_Gundam

По идее так должно происходить, но когда прибиваешь зомби, иногда память не освобождается. Или когда потекла память и процесс убился

bryak ★★★★
()

Вот смотри, тут админы сидящие на зарплате в красношляпе удаляют негативные комментарии о федоре, делай выводы.

anonymous
()
Ответ на: комментарий от anonymous

По поводу удаляют или не удаляют - не в курсе, но то, что федора анстейбл, - это даже не обсуждается. От себя могу сказать, что у меня на прошлом релизе дебиана в стейбле такое было. Запустил питон скрипт - отъело 20гб. Скрипт отработал, а память не разгрузилась. Питон скрипта нет в процессах, postgre что-то съела, но не 20гб. Начинаешь работать - система начинает свопиться т.е память не вымещается. Времени нет мониторить(а на это уйдет как минимум пол дня), ребутнул тачку и пошел дальше. Запускаешь еще раз тот же скрипт - всё отработало и память не потекла. Появляется такая ситуация эпизодически, но на текущем релизе дебиана вроде не замечал. Но в целом ситуация неприятная, т.к много чего открыто и надо ребутаться

bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.