Perl Out of memory!
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Perl Out of memory!
Доброго времени суток!
Суть проблемы: Запускаю скрипт который обрабатывает кучу бинарных файлов со статистикой. Скрипт как и положено ему - запускается и начинает активно хавать память. Когда заканчивается оперативка пишет Out of memory! И начинает хавать своп. И все бы хорошо но вот когда общий обем памяти (физическая + своп) достигает ~800 Мб скрипт тихо умирает без матов. Почитал гуглю на эту тему. Выяснил что есть в ядре хитрые цифири которые определяют максимальный размер ресурсов. Точнее вот тут: http://hyperrate.com/topic-view-thread.php?tid=2719 Дык вот. как рассчитать вот эти самые : kern.maxbcache, kern.maxtsiz, kern.dfldsiz, kern.maxdsiz, kern.dflssiz, kern.maxssiz and kern.sgrowsiz. так чтобы не пришлось потом к машине ехать ? На машине 512 мб рамы и 1.5 Гб своп. Заранее благодарен за ответы.
Суть проблемы: Запускаю скрипт который обрабатывает кучу бинарных файлов со статистикой. Скрипт как и положено ему - запускается и начинает активно хавать память. Когда заканчивается оперативка пишет Out of memory! И начинает хавать своп. И все бы хорошо но вот когда общий обем памяти (физическая + своп) достигает ~800 Мб скрипт тихо умирает без матов. Почитал гуглю на эту тему. Выяснил что есть в ядре хитрые цифири которые определяют максимальный размер ресурсов. Точнее вот тут: http://hyperrate.com/topic-view-thread.php?tid=2719 Дык вот. как рассчитать вот эти самые : kern.maxbcache, kern.maxtsiz, kern.dfldsiz, kern.maxdsiz, kern.dflssiz, kern.maxssiz and kern.sgrowsiz. так чтобы не пришлось потом к машине ехать ? На машине 512 мб рамы и 1.5 Гб своп. Заранее благодарен за ответы.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- zingel
- beastie
- Сообщения: 6204
- Зарегистрирован: 2007-10-30 3:56:49
- Откуда: Moscow
- Контактная информация:
Re: Perl Out of memory!
Код: Выделить всё
ulimit -c 10000
Z301171463546 - можно пожертвовать мне денег
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Perl Out of memory!
Не помогло. И я что то не понимаю при чем тут количество одновременно открытых файлов и то что процесс превышает лимит по памяти ?
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Perl Out of memory!
покажите то чт овы делаете?
- zingel
- beastie
- Сообщения: 6204
- Зарегистрирован: 2007-10-30 3:56:49
- Откуда: Moscow
- Контактная информация:
Re: Perl Out of memory!
Код: Выделить всё
systcl -a | gremp kern | grep max
Z301171463546 - можно пожертвовать мне денег
- hizel
- дядя поня
- Сообщения: 9032
- Зарегистрирован: 2007-06-29 10:05:02
- Откуда: Выборг
Re: Perl Out of memory!
рассмотреть вариант изменения алгоритма работы программы?
всетаки скриптовой язык, проще изменить
всетаки скриптовой язык, проще изменить

В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Perl Out of memory!
странный скрипт.... у меня для обработки гигового лога (привязки типа трафика и договора к ip-получателю) требуется несколько (!) килобайт, а сама обработка занимает несколько секунд. При этом неважно какого размера будет лог. Всё реализовано на С.iye писал(а):со статистикой. Скрипт как и положено ему - запускается и начинает активно хавать память.
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Perl Out of memory!
1) Скрипт писан не мной и он очень сложен, в котором встречаются бинарные вставки на С++. Поэтому переписывать все это у меня не возникает никакого желания. Да и писал все это человек, которому как кодеру я вполне доверяю.
2)
2)
zingel писал(а):systcl -a | gremp kern | grep max
Код: Выделить всё
kern.maxvnodes: 35524
kern.maxproc: 4020
kern.maxfiles: 8040
kern.argmax: 65536
kern.maxfilesperproc: 7236
kern.maxprocperuid: 3618
kern.ipc.maxsockbuf: 262144
kern.ipc.somaxconn: 128
kern.ipc.max_linkhdr: 16
kern.ipc.max_protohdr: 40
kern.ipc.max_hdr: 56
kern.ipc.max_datalen: 156
kern.ipc.msgmax: 16384
kern.ipc.shmmax: 33554432
kern.ipc.mcl_pool_max: 0
kern.ipc.maxsockets: 8040
kern.kq_calloutmax: 4096
kern.maxusers: 250
- Alex Keda
- стреляли...
- Сообщения: 35429
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: Perl Out of memory!
я бы рекомендвал увеличить количество рамы на машине.
или переписать скрипт.
==========
300 мегов свопа на машине с 512 рамы - это не работа.
или переписать скрипт.
==========
300 мегов свопа на машине с 512 рамы - это не работа.
Убей их всех! Бог потом рассортирует...
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Perl Out of memory!
просто так не может быть ничего



Последний раз редактировалось ProFTP 2008-09-05 8:40:33, всего редактировалось 1 раз.
- hizel
- дядя поня
- Сообщения: 9032
- Зарегистрирован: 2007-06-29 10:05:02
- Откуда: Выборг
Re: Perl Out of memory!
ProFTP как бэ намекает, что сделает из этого скрипта конфетку забесплатно 

В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Perl Out of memory!
нет, хотел потелепатировать...hizel писал(а):ProFTP как бэ намекает, что сделает из этого скрипта конфетку забесплатно

-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Perl Out of memory!
А где написано про 300 мегов свопа ? Своп 1.5 Гбlissyara писал(а):300 мегов свопа на машине с 512 рамы - это не работа.
угу .. не может .. вот и копаюProFTP писал(а):просто так не может быть ничего
Мне гараздо интереснее разобраться где вилы )hizel писал(а):ProFTP как бэ намекает, что сделает из этого скрипта конфетку забесплатно
- Alex Keda
- стреляли...
- Сообщения: 35429
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: Perl Out of memory!
между строк.iye писал(а):А где написано про 300 мегов свопа ? Своп 1.5 Гбlissyara писал(а):300 мегов свопа на машине с 512 рамы - это не работа.
процесс умирает на 800 мегах.
значит 800-500=300 мегов процесса находиться в свапе.
у меня на серверах когда две сотни мегабайт в свапе - я суетиться начинаю, при том что на сервере 4 гига рамы.
Убей их всех! Бог потом рассортирует...
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Perl Out of memory!
Машина вполне себе адекватная. В рабочем режиме она хавает не более 100 Мб рамы и все себе вполне летает. А чтобы посчитать итоговые цифирки раз в месяц - можно и подождать. На ней скорость не необходима.
Блин .. где еще ограничения копнуть ... и вот что странно ... до недавнего времени когда выполнялся скрипт и начинал заполнять своп надписи Out of memory! не вылазило ... может в перле есть какие то хитрые ограничения ? Гугль мне на эту тему ничего не рассказал. В login.conf все ограничения стоят в unlimited.
Блин .. где еще ограничения копнуть ... и вот что странно ... до недавнего времени когда выполнялся скрипт и начинал заполнять своп надписи Out of memory! не вылазило ... может в перле есть какие то хитрые ограничения ? Гугль мне на эту тему ничего не рассказал. В login.conf все ограничения стоят в unlimited.
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Perl Out of memory!
Устану постить .. ладно пойду куплю памяти раз идей больше нет.
- hizel
- дядя поня
- Сообщения: 9032
- Зарегистрирован: 2007-06-29 10:05:02
- Откуда: Выборг
Re: Perl Out of memory!
а идей больше и не будет
смысл увеличивать лимит памяти для процесса если он по самые гланды в свопе
смысл увеличивать лимит памяти для процесса если он по самые гланды в свопе
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Perl Out of memory!
iye писал(а):Устану постить .. ладно пойду куплю памяти раз идей больше нет.
я бы так не доверял, последний раз когда я сталкивался с биллингом на перле, там вся обработка была сделана на массивахiye писал(а):Скрипт писан не мной и он очень сложен, в котором встречаются бинарные вставки на С++. Поэтому переписывать все это у меня не возникает никакого желания. Да и писал все это человек, которому как кодеру я вполне доверяю.

выложи кусок скрипта, можно не весь
- hizel
- дядя поня
- Сообщения: 9032
- Зарегистрирован: 2007-06-29 10:05:02
- Откуда: Выборг
Re: Perl Out of memory!
что то я вас не понял
я што же наезд на перл !!?
или всетаки на идиотов?
я што же наезд на перл !!?
или всетаки на идиотов?

В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Perl Out of memory!
я когда плохо о перле говорил?hizel писал(а):или всетаки на идиотов?

- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Perl Out of memory!
если на пхп поставить 8Мб в пхп.ини, то он напишет всегда, по-моиму, что памяти не хватило.
если я правильно понял, то mod_perl работает? мало информации вообще
если я правильно понял, то mod_perl работает? мало информации вообще

-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Perl Out of memory!
у меня движок кушает в пике 2метра, на сайте постоянно загружены полтыщи разделов, ограничение стоит по-моему в 16метров, так что не надоProFTP писал(а):если на пхп поставить 8Мб в пхп.ини, то он напишет всегда, по-моиму, что памяти не хватило.

наврядли мод_перл, там биллинг, серверная часть, как я понимаю обработка логов.ProFTP писал(а):если я правильно понял, то mod_perl работает? мало информации вообще
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Perl Out of memory!
Вы хочите кода. Вот нате вам кусок из генерации отчета.
Код: Выделить всё
$message_text .= $owner_id." ".$owner_data::name{$owner_id}."\n";
@ip_list = keys %$mon_total;
$need_ip_total = $#ip_list>0;
if ($need_ip_total) {
$ip_total[0] = new Math::BigInt 0;
$ip_total[1] = new Math::BigInt 0;
$ip_total[2] = new Math::BigInt 0;
$ip_total[3] = new Math::BigInt 0;
}
foreach $ip (@ip_list) {
$message_text .= " ".$ip.": ".$mon_total->{$ip}->[2]."\n";
if ($need_ip_total) {
$ip_total[0] += $mon_total->{$ip}->[0];
$ip_total[1] += $mon_total->{$ip}->[1];
$ip_total[2] += $mon_total->{$ip}->[2];
$ip_total[3] += $mon_total->{$ip}->[3];
}
}
$message_text .= " Итого: ".$ip_total[2]."\n" if $need_ip_total;
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Perl Out of memory!
ну и не мудрено, что памяти не хватает, ваш программер вместо того, чтобы взвалить работу с огроменными массивами на мускул, решил сделать её на перле и очень зря, перл кушает горзадо больше памяти чем мускул на тех же таблицах.iye писал(а):$mon_total->{$ip}->[0];
Тут нужно делать всю обработку данных на временных таблицах муси, хоть heap, хоть myisam, но никак не на перле. Можешь, конечно оперативу растить, но это путь в никуда. Делать надо на мускуле, перл юзать только как связку.
-
- ст. сержант
- Сообщения: 360
- Зарегистрирован: 2008-07-29 9:02:04
Re: Perl Out of memory!
Все это понятно. Но вот я одного понять не могу - если своп не полный - то почему в него до предела нельзя данные пихать а ? 
