LINUX.ORG.RU

Процесс убивается ядром по OOM! Что делать?


0

0

Процесс, активно жрущий память вдруг умирает с месседжом Killed.
В /var/log/messages появляется запись: process killed, oom.

А собственно вопрос: как же заранее узнать, когда памяти не хватит?
Ведь этот же не дело: был процесс, работал, выделял память, и вдруг беспричинно умирает!

Что тут можно сделать?


Ответ на: комментарий от idle

>> малыш,

>> malloc это обертка над brk,

>дяденька, это неправда.

а если грубо???

то что malloc делает существенно больше чем brk мы эт понимаем.

PS:там требуется ваша помощь в соседнем треде а тоя кажись тама дров наламал

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

> то что malloc делает существенно больше чем brk мы эт понимаем.

да нет, я имел в виду что malloc вовсю использует mmap.

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

>> то что malloc делает существенно больше чем brk мы эт понимаем.

>да нет, я имел в виду что malloc вовсю использует mmap.

значит я просто вас неправильно понял

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

может я конечно отстал от жизни, но
> да нет, я имел в виду что malloc вовсю использует mmap.
не поленитесь,
привидите код с malloc`ом и вывод strace который это продемонстирует..

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

> не поленитесь,

поленюсь :)

у меня манов нету (оооооооосень старые), поищите
что-нибудь про MMAP_THRESHOLD.

все, что больше - через mmap.

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

повторяю, brk() - это тот же mmap(), только специализированный,
то есть c ограниченным набором возможностей как бы.

уж мне вы поверьте :)

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

idle, разрешите немного не поверить ;-)
 все-же brk() и mmap() - два РАЗЛИЧНЫХ системных вызова,
и в разных системах действительно реализуются по разному.
 НО (по моим сведениям) библиотечная функция malloc использует классический unix-подход и использует brk(), поэтому встретить 
mmap в трассировке malloc - весьма проблематично.
 Хотя действительно реализация mmap  brk на уровне ядра linux весьма схожа. но это уже не относится к топику - вроде ведь обсуждается прикладная задача ;-)

p.s. щас гляну исходник malloc - если я не прав, принесу извенения

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

частично извинясь ;-)
malloc, который в glibc в зависимости от того,
что configure нароет при тестах, может использовать 
brk(), mmap(ANONYMOUS) mmap(/dev/zero)..

p.s. надо-же как прогресс шагнул ;-)
p.p.s. если кому-то интерестно,
описание алгоритма malloc :http://gee.cs.oswego.edu/dl/html/malloc.html
старенькое, но полненькое ;-))

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