Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Vadim Tzirulnicov                    2:5020/400     20 Nov 2004  13:53:37
 To : All
 Subject : Утечка памяти. Помогите !
 -------------------------------------------------------------------------------- 
 
 Я столкнулся с проблемой, которую уже несколько недель не могу решить. А
 проблема такая - для ускорения индексации фтп-ресурсов написал две
 дополнительные таблицы, одна из которых (phpmw_Ftpsearch_words) содержит
 слова из URL'ов в phpmw_ftpsearch_base.
 К примеру, URL
 ftp://possum.ints.ru/abc.zip разбивается в этой таблице на:
 
 ftp
 possum
 ossum
 ssum
 sum
 ints
 nts
 abc
 zip
 
 В таблице phpmw_ftpsearch_wordsmatch стоят соответствия между таблицей слов
 и таблицей юрлов.
 
 Скрипт отрабатывается с терминала от рута, и  ограничений у него нет
 (проверено).
 
 Без использования таблицы слов и соответствий между словами и юрлами скрипт
 нормально отрабатывается. Когда же включаю строки кода, работающие с этими
 ополнительными таблицами:
 
 =head
       $insertid = $db_handle->{'mysql_insertid'};
       @word_ar=split(/[^a-zA-Zа-яА-Я0-9]+/,($type eq
 'd'?$dirName.'/':'').$name);
       foreach $temp(@word_ar){
   while(1){
      goto END_WHILE if $temp eq '';
      # Проверяем, существует ли в phpmw_ftpsearch_words слово "$temp"
      $db_shandle=$db_handle->prepare("SELECT ftpsearchword_id from
 ".$db_prefix."_ftpsearch_words where ftpsearchword_text like ?") or die
 $db_shandle->errstr;
      $db_shandle->execute($temp);
        @rowTemp=$db_shandle->fetchrow_array;
      if (!scalar(@rowTemp)){
         $db_shandle=$db_handle->prepare("INSERT into
 ".$db_prefix."_ftpsearch_words (ftpsearchword_text) VALUES (?)");
         $db_shandle->execute($temp);
         $rowTemp[0]=$db_handle->{'mysql_insertid'};
      }
      sql_query("INSERT INTO ".$db_prefix."_ftpsearch_wordmatch VALUES
 ($insertid,".$rowTemp[0].",".$row[0].")");
      $temp=substr($temp,1);
      END_WHILE:
      last if length($temp)<3;
   }
       }
 =cut
 
 , скрипт некоторое время после старта нормально отрабатывается, а затем
 вываливается: DBD::MySQL::st failed: Outr of memory ! Хотя на момент
 получения даненой ошибки оперативная память используется не полностью -
 максимум на 3/4, своп вообще пуст.
 
 Вот эти две дополнительные таблицы:
 
 create table phpmw_ftpsearch_words(
    # До 4.294.967.294 слов
    ftpsearchword_text varchar(50) binary not null default '',
    ftpsearchword_id int(11) UNSIGNED NOT NULL auto_increment,
    PRIMARY KEY (ftpsearchword_text),
    KEY ftpsearchword_id (ftpsearchword_id)
 );
 
 create table phpmw_ftpsearch_wordmatch(
   ftpsearchwm_baseid mediumint(8) UNSIGNED NOT NULL default '0',
   ftpsearchwm_wordid int(11) UNSIGNED NOT NULL default '0',
   ftpsearchwm_hostid mediumint(8) UNSIGNED NOT NULL default '0',
   KEY ftpsearchwm_baseid (ftpsearchwm_baseid),
   KEY ftpsearchwm_wordid (ftpsearchwm_wordid),
   KEY ftpsearchwm_hostid (ftpsearchwm_hostid)
 );
 
 В скрипте use strict -w; стоит. Ограничений на выполнение скрипта, ещё раз
 повторяюсь, нет. Hа момент получения "out of memory" все таблицы, с которыми
 работает скрипт, имеют суммарный объём в 20-25 мег.
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Утечка памяти. Помогите !   Vadim Tzirulnicov   20 Nov 2004 13:53:37 
 Re: Утечка памяти. Помогите !   Konstantin Tokar   20 Nov 2004 14:22:26 
 Re: Утечка памяти. Помогите !   Vadim Tzirulnicov   21 Nov 2004 03:12:40 
 Re: Утечка памяти. Помогите !   Konstantin Tokar   21 Nov 2004 04:17:26 
Архивное /ru.perl/657738ed0a0e.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional