Модераторы: ginnie, korob2001

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Утечка памяти ? 
:(
    Опции темы
admsasha
Дата 26.9.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Код

#!/usr/bin/perl

use DBI;
use List::Util 'sum';

my $query;
my $output;

my $db = DBI->connect("DBI:mysql:test","root","mypassword");

while(1){
    for($n=0;$n<1000;$n++){

        $query="SELECT UNIX_TIMESTAMP()";
        $output = $db->prepare($query);

        undef($output);

    }
    $mem = sum(map {(split)[4]} grep {/\btest3\b/} `top -b -n1`) || 0;
    print "$mem Mb\n";
    sleep(1);
}



вот что показывает
Код

10488 Mb
10488 Mb
10488 Mb
10616 Mb
10616 Mb
10736 Mb
10736 Mb
10868 Mb
10868 Mb
11000 Mb
11000 Mb
11132 Mb


Без модуля  List::Util пробывал, тоже самое (проверял через top)

т.е. судя по этому примеру идет постоянная утечка в памяти. Что не так делаю ? 

Код

$ perl -MDBI -e 'DBI->installed_versions'
  Perl            : 5.010000    (i386-linux-thread-multi)
  OS              : linux       (2.6.22.18-server-1mdv)
  DBI             : 1.607
  DBD::mysql      : 4.008
  DBD::Sponge     : 12.010002
  DBD::Gofer      : 0.011565
  DBD::File       : 0.35
  DBD::ExampleP   : 12.010007
  DBD::DBM        : 0.03






Это сообщение отредактировал(а) admsasha - 26.9.2009, 10:20
PM MAIL WWW ICQ Jabber   Вверх
amg
Дата 26.9.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 9
Всего: 50



Цитата(admsasha @  26.9.2009,  09:43 Найти цитируемый пост)
Perl            : 5.010000
Ого, перл то какой старый! Тем более, первая версия ветки (начальные версии программ, как известно, часто бывают с ошибками). Вовсе не утверждаю, но может, дело в этом?

PM MAIL   Вверх
admsasha
Дата 26.9.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Цитата(amg @  26.9.2009,  22:49 Найти цитируемый пост)

Perl            : 5.010000
Ого, перл то какой старый! Тем более, первая версия ветки (начальные версии программ, как известно, часто бывают с ошибками). Вовсе не утверждаю, но может, дело в этом?


незнаю, почему так показал модуль, но вот реальный perl
Код

$ perl -v
This is perl, v5.10.0 built for i386-linux-thread-multi

последний, на данный момент это "5.10.1". Так что не такой уж и старый.

Это сообщение отредактировал(а) admsasha - 26.9.2009, 16:13
PM MAIL WWW ICQ Jabber   Вверх
KSURi
Дата 26.9.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 5
Всего: 27



Цитата(amg @  26.9.2009,  15:49 Найти цитируемый пост)
Ого, перл то какой старый!

Нумерация под-веток версии занимает по три цифры: 5.008008 == 5.8.8.

admsasha, 
это не утечка памяти. Недавно был уже подобный топик.

Это сообщение отредактировал(а) KSURi - 26.9.2009, 17:17


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
admsasha
Дата 26.9.2009, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Цитата(KSURi @  27.9.2009,  00:16 Найти цитируемый пост)
admsasha, 
это не утечка памяти. Недавно был уже подобный топик. 

А что это ? 

Ну или ссылку кинь, пожалуйста, на подобный вопрос.


PM MAIL WWW ICQ Jabber   Вверх
KSURi
Дата 26.9.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 5
Всего: 27



На всякий случай добавлю, что запрос у вас не выполняется)

Добавлено @ 17:20
Ссылка: http://forum.vingrad.ru/act-Search/f-595.html

Это сообщение отредактировал(а) KSURi - 26.9.2009, 17:21


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
admsasha
Дата 26.9.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Цитата(KSURi @  27.9.2009,  00:20 Найти цитируемый пост)
Ссылка: http://forum.vingrad.ru/act-Search/f-595.html

я поиск знаю где, но что искать, если это не утечка памяти, то что ?
PM MAIL WWW ICQ Jabber   Вверх
DurRandir
Дата 27.9.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: нет
Всего: 17



В 5.10.х текут weak references. Для dbi::prepare это кусок кода внутри dbih_setup_handle. На 5.8.8 этой утечки нет (зато есть свои, но их обходить проще - поэтому я не перехожу на 5.10).
PM   Вверх
ginnie
Дата 27.9.2009, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 6
Всего: 49



DurRandir, можно какую-нибудь ссылку по поводу dbih_setup_handle? Касательно темы, я нашел только http://rt.perl.org/rt3//Public/Bug/Display.html?id=56908, но это ошибка в самом Perl, исправленная в 5.10.1.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
DurRandir
Дата 27.9.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: нет
Всего: 17



Я и подразумевал сам перл. У меня аналогичная проблема с другим модулем была. 5.10.1 правда не тестировал - под рукой только 5.10.0 win32.

По твоей ссылке в последних сообщениях - "DBI uses weakrefs for only one thing", и дальше описание что сломалось.

dbih_setup_handle - это из xs-части DBI, внутренности prepare().
PM   Вверх
admsasha
Дата 28.9.2009, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Обновил DBI
Код

  Perl            : 5.010000    (i386-linux-thread-multi)
  OS              : linux       (2.6.22.18-server-1mdv)
  DBI             : 1.609
  DBD::mysql      : 4.008
  DBD::Sponge     : 12.010002
  DBD::Proxy      : 0.2004
  DBD::Gofer      : 0.011565
  DBD::File       : 0.37
  DBD::ExampleP   : 12.010007
  DBD::DBM        : 0.03


Ничего не поменялось, всё тоже самое. 

А нет, поменялось, теперь изначально памяти ест больше (


PM MAIL WWW ICQ Jabber   Вверх
DurRandir
Дата 28.9.2009, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: нет
Всего: 17



>admsasha
Дело не в DBI. Дело в версии перла. Есть следующие варианты:
- обновиться до 5.10.0.1, если судить по комментариям в баге для DBI - там исправлено, но мне негде проверить.
- откатиться назад до 5.8.8 - там точно нет утечки в этом месте, я проверял у себя на v5.8.8 built for i386-freebsd-64int
- поставить вопрос по другому - а зачем постоянно создавать/уничтожать handles? У вас fastcgi/mod_perl и модуль выполняет большое количество запросов? Можно уменьшить время жизни, можно пересмотреть архитектуру. Лучший вариант - один prepare() и использовать его много раз.
PM   Вверх
admsasha
Дата 28.9.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6



Цитата(DurRandir @  28.9.2009,  14:21 Найти цитируемый пост)
- поставить вопрос по другому - а зачем постоянно создавать/уничтожать handles? У вас fastcgi/mod_perl и модуль выполняет большое количество запросов? Можно уменьшить время жизни, можно пересмотреть архитектуру. Лучший вариант - один prepare() и использовать его много раз. 

Это демон который периодически работает с базой. Откатиться назад нет возможности. Это очень сокращенный пример, чтобы показать суть проблемы. ( я даже execute() забыл)

Это сообщение отредактировал(а) admsasha - 28.9.2009, 13:16
PM MAIL WWW ICQ Jabber   Вверх
admsasha
Дата 28.9.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 28.1.2005

Репутация: нет
Всего: 6




Похоже только KSURi знает ответ, но он никому не скажет  smile 
PM MAIL WWW ICQ Jabber   Вверх
ginnie
Дата 28.9.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 6
Всего: 49



admsasha, Вам же уже сказали, поставьте perl 5.10.1. Или этот вариант Вам тоже не подходит?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.