Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Учёт расхода памяти  (Прочитано 13044 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 16-05-2008 16:33 » 

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

Есть time, но оно у меня память не измеряет - всегда 0 возвращает. В man написано, что она во FreeBSD измеряет всё заявленное, но надо в Linux.


Или не, лучше так: нет ли консольной программы, которая бы ограничивала объём памяти, доступный дочернему процессу, а в случае превышения лимита убивала бы процесс и сообщала что-нибудь дружелюбное?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-05-2008 17:13 » 

Некогда использовал memprof (только она гуевая): и текущую память показывала, и пики, и утечки.

Посмотри в pinfo libc раздел "Resource Usage And Limitation".

Подраздел "Resource Usage".
Цитата
The function 'getrusage' and the data type 'struct rusage' are used to examine the resource usage of a process. ...

Подраздел "Limiting Resource Usage":
Цитата
You can specify limits for the resource usage of a process. When the process tries to exceed a limit, it may get a signal, or the system call by which it tried to do so may fail, depending on the resource. Each process initialy inherits its limit values from its parent, but is can subsequently change them.
...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 17-05-2008 16:00 » 

Увы, time именно её содержимое и выдаёт. Во FreeBSD работает, в Linux - нет.

По поводу лимитов, я так понимаю, нужно в сторону профиля пользователя копать. То, что во FreeBSD в /etc/login.conf описывается, а в Linux... какой-то /etc/login.defs есть...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 17-05-2008 17:41 » 

dimka, нет, профиля не нужны - здесь все програмно делается. time тоже не надо заменять на getrusage - они могут по разному работать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #4 : 19-05-2008 05:34 » 

чем top в batch моде не устраивает?
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 20-05-2008 08:47 » 

LogRus, скоростью обновления: может пропустить пики расхода памяти, может не успеть зафиксировать быстро отработавшую программу.

Пока сделал во FreeBSD при помощи time внутри bash-скрипта, который пускает программу как фоновый job, а сам ждёт ограниченное реальное время завершения её работы с ежесекундными проверками. Если timeout случился, а программа ещё работает, то убивает фоновый job и завершает работу. Если фоновый job завершился до timeout, то завершается сам скрипт. Хотя надо попробовать задать параметры через login.conf.
« Последнее редактирование: 20-05-2008 08:56 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 20-05-2008 08:52 » 

dimka,  а что это за time?
Цитата
DESCRIPTION
     The time utility executes and times the specified utility.  After the
     utility finishes, time writes to the standard error stream, (in seconds):
     the total time elapsed, the time used to execute the utility process and
     the time consumed by system overhead.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #7 : 20-05-2008 08:53 » 

dimka, а как на счет top --help

top -d 0.1
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 20-05-2008 08:59 » 

Недостаток скрипта в том, что он определяет timeout в календарном времени, а не во времени работы процессора. Т.е. при высоко загруженной системе, фоновый job получит мало времени CPU и может не выработать весь ресурс.

McZim, чтобы 80% ресурсов системы уходило на работу top? Спасибо, я как-нибудь иначе сделаю.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
McZim
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #9 : 20-05-2008 09:01 » 

dimka, это кто ж тебе такое сказал? у меня выше 17 не поднимается!
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 20-05-2008 09:51 » 

dimka, если хочешь полностью мониторить расход динамической памяти, то надо перехватывать malloc/free при загрузке программы. Как это делается - не спрашивай, но метод такой есть. Конечно, обходной маневр с системным вызовом на выделение блока памяти это не перехватит.
Тот memprof такими вещами и занимался. Что удобно было: по завершению программы он показывал, в какой ф-ии, на какой строке (естьественно, была отладочная сборка) и сколько памяти выделено  и не освобождено при завершении программы. И пик расхода тоже фиксировался.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 20-05-2008 09:59 » 

McZim, я не знаю, как там у тебя, а у меня на PII-266 ресурсы сжираются все. Для своей машины выбери 0.01 или 0.001 - будет аналогично.

И частота роли не играет, поскольку измерения происходят через интервалы времени, а что происходит внутри этих интервалов, top не знает. Поэтому top можно применять, когда существует обоснование, что расход памяти приложением достаточно монотоннный. У меня соблюдение такого условия не гарантируется.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 20-05-2008 11:19 » 

а может здесь помочь ?
ps -p <pid>
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 20-05-2008 11:39 » 

можно попытаться еще и
rrdtool
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #14 : 21-05-2008 05:08 » 

попробуй valgrind отличная тулза для анализа выделений памяти
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines