LINUX.ORG.RU

поиск утечки памяти

 


1

3

Есть встраиваемая система на базе x86 и в ней OpenEmbedded крутится. Со временем, в течение часа, потребление памяти системой возрастает на 10 Мб, и так всё время, видимо до исчерпания.

Есть ли какой-то способ выявить процессы в системе, потребление памяти которыми (не обращая внимания на периодические колебания) имеет тенденцию к увеличению?

Кто как решает эту проблему?

P.S.

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

Первое, что приходит в голову - собирать скриптом выхлоп

ps -eo comm, rss, vsize

и потом распарсить.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от tailgunner

Я _не_знаю_ что заняло память. Просто свободной памяти становится меньше и это не дисковое кэширование. Просто что-то течет.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Я _не_знаю_ что заняло память

1. Растут ли процессы? От этого зависит, в ядре искать или в юзерспейсе.

2. Фейлят ли попытки выделить память? Если нет, то память занимается под кэш и в этом ничего страшного нет.

3. Есть ли в ядре самописаные драйверы? Если есть, можно посмотреть /proc/slabinfo - в зависимости от тактики выделения памяти в драйвере, утечка может быть заметна там.

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

1. это еще надо выяснить - растет общий объем используемой памяти 2. про кэш в курсе, он тут ни при чем 3. нет

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от cherry-pick

Спасибо, попробую atop, не слышал про эту штуку ранее.

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

1. это еще надо выяснить - растет общий объем используемой памяти

Чудес не бывает - память либо в процессах, либо в кэше, либо в слабах.

2. про кэш в курсе, он тут ни при чем

Отказы в выделении памяти есть или нет?

tailgunner ★★★★★
()
  • Кэш ядра имеет тенденцию съедать всю доступную память
  • Проверить не возвращается ли память после вызова
    # echo 3 > /proc/sys/vm/drop_caches
    
  • Запустить slabtop (из пакета procps) и посмотреть что в ядре держит память
sf ★★★
()
Ответ на: комментарий от sf

Пока не занимался этой задачей. Короче, я использую утилиту htop, она показывает что кэш (дисковый в том числе), а что просто занятая память. И я вижу что в течение часа память кушается всё больше и больше. Попробую покилять свои программы, drop_caches тоже попробую...

I-Love-Microsoft ★★★★★
() автор топика

Гдето на просторах интернетов есть перловый скрипт который это делает для приложений путем периодического парсинга /proc. Кажется он один такой.

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

Оставлю на сутки и посмотрю сколько сожрало. Это когда всё доделаю.

Понял. htop Mem: used: - это used растет, медленно растет, что-то течет.

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

Какой-то процесс в htop становится безусловным лидером по потреблению памяти? Плодятся ли новые процессы? Если да, то какие?

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

На рабочем компьютере я вижу что память очень прыгает, но если ничего не делать и смотреть htop то видно что нет тенденции к росту, утечек нет. На целевой же системе ПО, написанное коллегами, видимо что-то не чистит за собой, но! Их ПО это не просто софт на Qt но еще и набор скриптов, может стороннее ПО дает эффект...

Чисто визуально процент потребленной памяти процессами не растет. Лидеры по потреблению тоже не увеличивают процент. Новые процессы не плодятся - есть общий счетчик процессов и он не растет (была ошибка что плодились процессы и я ее пофиксил).

В общем, буду пробовать этот совет выше:

Гдето на просторах интернетов есть перловый скрипт который это делает для приложений путем периодического парсинга /proc. Кажется он один такой.

I-Love-Microsoft ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.