![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
Здравствуйте,
файл 87 метров, в памяти загружается и сжирает по top 3.9% (памяти 4 гига), после очистки внизу, остается висеть 3.7% если в массив @templates не записывать ничего то висит процесс с 0.3% памяти вопрос, почему не очищается память? ОСь: linux fedora 11 64x Perl: 10.0.1 уже мозг закипает заранее спасибо |
|||
|
||||
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
короче проблема не решаемая... это баг или фича перла не знаю
в мануалах вообще написано, что если Вам надо очищать память (контролировать), юзайте Си вообщем решил задачу банальным форком, где делается что надо, что требует память, и потом убивается этот чилд... по другому никак P.S. в 5.12 перле, который только вышел, этот "глюк" с очисткой, так же остался... |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
вы можете управлять памятью через вызоб brk (man 2 brk)
|
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
А как это сделать из perl? |
|||
|
||||
| shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
DooZ, да память мы уже исследовали, что она резервируется perl под себя и назад отдаваться не хочет
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
perldoc -f syscall
|
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
А что передать brk() в качестве параметра?
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
man 2 brk
|
|||
|
||||
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
man 2 brk int brk(void *addr); 2arto Вы в теории только знаете что это "нужно" сделать? или есть реальный опыт юзания очистки памяти с помощью brk именно в PERL ? если есть, и если не затруднит, напишите пожалуйста рабочий пример... Добавлено через 2 минуты и 11 секунд если поставить так: syscall(&SYS_brk, "@templates", length "@templates"); то все работает, имеется ввиду не вылетает но памяти начинает жрать уже 8.4% кто-нить подскажите как быть-то... |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Ну так точно неправильно. В документации к этой функции сказано что нужно передать 1 параметр, указатель типа void. Но на что именно этот указатель, а тем более как его получить в perl совершенно не ясно. Может уважаемый arto всё же объяснит как правильно пользоваться brk(void *end_data_segment)? |
|||
|
||||
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
щас perl перекомпилирую с malloc ОСи, а не его собственного, по результатам отпишусь
Добавлено через 14 минут и 30 секунд чет все равно не помогло... |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
DooZ, это malloc ОС или перловый? |
|||
|
||||
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
если стоит usemymalloc='n'; значит перл юзает свой malloc
я щас проверял при своем malloc при очистке того же undef @templates память первоначально жралось 3.9%, после undef 3.7% стало, т.е. он что-то очищает, но не понятно почему не все когда я скомпилил без перлового malloc тобишь будет usemymalloc='y' при загрузке тогоже файла в @templates Он жрал уже 4.4% НО при undef @templates память так же оставалась 4.4% вот и хз как его чистить... |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
В perldoc -q "program shrinks" примерно так и пишут, хотите почистить память - завершите процесс программы
|
|||
|
||||
| DooZ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
нашел тут скрипт
тут все очищается... изучаю Добавлено через 2 минуты и 33 секунды нашел "причину" почему в скрипте все очищается там файл создавался коммандой: dd if=/dev/zero of=zero.dat bs=8192 count=131072 т.е. он пустой... но если в файле будут строки (текст), то хрен что очищается Добавлено через 4 минуты и 49 секунд а вот так файл со строками очищается
теперь вообще ничего не понятно массивы он чистить не хочет, переменные запросто но как работать-то без массивов? |
||||
|
|||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
пойнт в том, что управление памятью в перл -- сложная штука.
код перл -- это данные для бинарника /usr/bin/perl. и если вы будете управлять сами выделением и удалениме сегментов памяти, вы должны знать как работает интерпретатор на очень низком уровне. если проще -- дайте перл самому работать с памятью. либо смотрите реализацию malloc в вашей ос и в перл. |
|||
|
||||
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
мде ответ из серии "не нравится наша чистка, пишите на СИ"...
короче косяк перла остался... эхх... |
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
"это не баг, это фича"
или вам нужен пистолет, чтобы прострелить себе ногу? xs к вашим услугам. там сможете использовать sbrk, для уверенности. |
|||
|
||||
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
что есть xs ?
Добавлено через 11 секунд что есть xs ? Добавлено через 13 минут и 36 секунд нашел что такое xs буду изучать http://perldoc.perl.org/perlxs.html а вообще конечно же перл расстраивает... надо бы питончик подучить |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Неужто там по другому дела обстоят? Если узнаете сообщите |
|||
|
||||
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
Ну вроде как говорят там работа с памятью в полном порядке, судя по сообщениям которые я вычитал по разным форумам
если кто-то знает наверняка сообщите, что бы время не терять |
|||
|
||||
| DooZ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 25.11.2005 Репутация: нет Всего: 1 |
Собственно проблема решилась элементарно
был установлен перл версии v5.8.9 вот если кому надо http://cpan.org/src/perl-5.8.9.tar.gz эта версия справляется с уборкой мусора просто обалденно, на тех же участках кода, где память жралась по 10% и повышалась, в этой версии не поднимается выше 1.4% и все замечательно очищается вообщем вот такие пироги товарищи но блин я добился того чего хотел |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |