Как обнаружить утечку памяти?

Вероятно, это порядок загрузки устройств в вашем BIOS. Проверьте это, чтобы поставить свой второй жесткий диск первым, зарегистрированным при запуске.

Вы должны попробовать восстановить grub: http://doc.ubuntu-fr.org/tutoriel/comment_restaurer_grub[!d1 ]

Для тех, кто не говорит по-французски: http://doc.ubuntu-fr.org/tutoriel/comment_restaurer_grub

1
задан 13 April 2017 в 15:24

5 ответов

Трейк drop_cache не освободит память, он сбросит кеш. Использует команду ps, если вы хотите определить, какие процессы используют больше памяти.

Например, чтобы отслеживать список 15 лучших пользователей резидентной памяти.

$ watch "ps --sort -rss -eo pid,pmem,rss,vsz,comm | head -16"
  PID %MEM   RSS    VSZ COMMAND
 2590 13.4 136892 825000 firefox
 1743 10.7 109020 300780 Xorg
 2067  8.5 86764 1118140 unity-2d-shell
 3307  4.1 42560 627780 unity-2d-spread
 2068  2.9 29904 617644 unity-2d-panel
 2092  2.5 25524 1291204 nautilus
 2457  1.9 20292 530276 gnome-terminal
 2351  1.9 20016 821488 unity-scope-vid
 2161  1.9 19476 531968 unity-panel-ser
 2034  1.7 18256 759716 gnome-settings-
 2074  1.5 16176 518016 nm-applet
 2273  1.5 15452 580416 unity-lens-vide
 2051  1.4 15112 524260 metacity
 2395  1.2 12836 407336 update-notifi

Вы можете проверить также резервирование общей памяти, но вы будете знать только, кто является владельцем сегментов.

Распределение Pmap:

$ ls -l /run/shm
total 272
-r-------- 1 ed      ed      67108904 Nov 29 18:17 pulse-shm-1884617860
-r-------- 1 lightdm lightdm 67108904 Nov 29 18:11 pulse-shm-2352897759
-r-------- 1 ed      ed      67108904 Nov 29 18:12 pulse-shm-3444873503
-r-------- 1 ed      ed      67108904 Nov 29 18:12 pulse-shm-3485341848
-r-------- 1 lightdm lightdm 67108904 Nov 29 18:11 pulse-shm-535843976
-r-------- 1 ed      ed      67108904 Nov 29 19:12 pulse-shm-789046959
-r-------- 1 ed      ed      67108904 Nov 29 18:38 pulse-shm-863909656

$ df /run/shm 
Filesystem     1K-blocks  Used Available Use% Mounted on
none              509332   272    509060   1% /run/shm

Обратите внимание, что зарезервированные распределения намного выше, чем реальные выделенные страницы (df 'used')

Выделения System V: [ ! d6]

$ ipcs -m 

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 294912     ed         700        122880     2          dest         
0x00000000 327681     ed         700        4823040    2          dest         
0x00000000 491522     ed         600        393216     2          dest         
0x00000000 589827     ed         700        4578120    2          dest         
0x00000000 425988     ed         700        27852      2          dest         
0x00000000 458757     ed         600        393216     2          dest         

Изменить: необходимо передать --sort -rss в ps, чтобы получить процессы с наибольшим использованием памяти, в противном случае список процессов будет отсортирован с увеличением числа и даст процессы с наименьшим использованием памяти.

8
ответ дан 25 May 2018 в 10:00

У меня есть более старая машина, которую я использую, которая постоянно выплевывает сообщения о утечке памяти:

root@:~# free -m
             total       used       free     shared    buffers     cached
Mem:          1898       1523        374        131         32        588
-/+ buffers/cache:        902        995
Swap:         1942        480       1462

Мой скрипт:

sync; sudo echo 3 > /proc/sys/vm/drop_caches

Именовал его cache.sh [!d2 ]

root@~# ./cache.sh
root@~# free -m
             total       used       free     shared    buffers     cached
Mem:          1898       1106        791        126          1        207
-/+ buffers/cache:        897       1000
Swap:         1942        480       1462

Вы можете видеть, что я был до 374 МБ, запустил sync; sudo echo 3 > /proc/sys/vm/drop_caches и получил 417 МБ назад. Можно cron запускать каждые 5 минут или просто открывать терминал и запускать его, когда вы видите медленную производительность. Да, мне нужно добавить память в машину ...

5
ответ дан 25 May 2018 в 10:00
  • 1
    Форматирование кажется проблемой, не знаю, как исправить – Warpig 1 December 2014 в 03:23
  • 2
    Используйте ссылку edit под своим сообщением. Существует панель форматирования и оранжевый вопросительный знак над текстовой областью, ссылающейся на Markdown formatting help . – David Foerster 1 December 2014 в 03:43
  • 3
    Пожалуйста, посмотрите мой недавний комментарий по вопросу . Я убежден, что идея освободить основную память путем сброса и сброса кешей ошибочна, и я знаю, что я не одинок с этим выводом. – David Foerster 1 December 2014 в 03:58
  • 4
    Огромное спасибо, Дэвид ... Я полностью согласен с тем, что кэш сбрасывания / сброса ошибочен ... Но что-то повесится и заставило замолчать / заблокировать машину ... Просто озадачило, что это такое, думая о проблеме с firefox. .. – Warpig 1 December 2014 в 04:24

Здесь почти гарантированы шаги, чтобы найти, кто утечка памяти:

Узнайте PID процесса, который вызывает утечку памяти.
ps -aux
захватить /proc/PID/smaps и сохранить в некоторый файл, например BeforeMemInc.txt. подождите, пока память не увеличится. /proc/PID/smaps и сохраните afterMemInc.txt, найдите разницу между первым smaps и вторым smaps, e. г. с diff -u beforeMemInc.txt afterMemInc.txt запишите диапазон адресов, где память увеличилась, например:
   beforeMemInc.txt            afterMemInc.txt
---------------------------------------------------
2b3289290000-2b3289343000   2b3289290000-2b3289343000  #ADDRESS
Shared_Clean:    0 kB       Shared_Clean:    0 kB          
Shared_Dirty:    0 kB       Shared_Dirty:    0 kB
Private_Clean:   0 kB       Private_Clean:   0 kB
Private_Dirty:  28 kB       Private_Dirty:  36 kB  
Referenced:     28 kB       Referenced:     36 kB
Anonymous:      28 kB       Anonymous:      36 kB  #INCREASE MEM
AnonHugePages:   0 kB       AnonHugePages:   0 kB
Swap:            0 kB       Swap:            0 kB
KernelPageSize:  4 kB       KernelPageSize:  4 kB
MMUPageSize:     4 kB       MMUPageSize:     4 kB
Locked:          0 kB       Locked:          0 kB
VmFlags: rd wr mr mw me ac  VmFlags: rd wr mr mw me ac
использовать GDB для выгрузки памяти при запуске процесса или получить coredump с помощью gcore -o process Я использовал gdb для запуска процесса для дампа память для некоторого файла.
gdb -p PID
dump memory ./dump_outputfile.dump 0x2b3289290000 0x2b3289343000
, используйте команду strings или hexdump -C для печати dump_outputfile.dump
strings outputfile.dump
. Вы получаете читаемую форму, где вы можете найти эти строки в исходном коде. Проанализируйте источник, чтобы найти утечку.
5
ответ дан 25 May 2018 в 10:00
  • 1
    Я нахожусь в контейнере Docker, получая ошибку отказа от разрешения при запуске cat /proc/2882/smaps > /tmp/before.txt на шаге 2. Что я сделал неправильно? – Devy 3 April 2018 в 00:15

memstat также является хорошим инструментом, который покажет объем памяти, используемый каждым блоком, а также объем памяти, используемой загруженными библиотеками. Не лучший инструмент, но его нужно использовать для сбора деталей и статистики.

memstat -w -p pid - хорошая команда для использования.

3
ответ дан 25 May 2018 в 10:00

У меня была аналогичная проблема, но с очень странным решением.

По какой-то неизвестной причине у меня был почтовый сервер на моей настройке и запуске ноутбука. Я не знаю, почему у меня было это ... Однако я закрыл службу, и оказалось, что это программное обеспечение на моем ноутбуке находилось под атакой ddos. После этого все было в порядке.

1
ответ дан 25 May 2018 в 10:00

Другие вопросы по тегам:

Похожие вопросы: