parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Зависание parser, утечка памяти (WinXP, Apache 2).

off 23.05.2008 18:51

Делая нетипичную для веба задачу, имитировал загрузку (вычислительную процедуру) следующим кодом:
^for[j](1;200){ 
#^memory:compact[]
^for[i](1;10000){ 
^rem{x empty z}
}
}
^eval($i*$j)
Обнаружил, что процесс parser отъедает себе в этом случае 740326КБ памяти и зависает (наблюдаю в Диспетчере задач, нагрузка с процессора спадает).
Если комментарий заменить на какой нибудь
$count[$i]
, то parser съест 595180КБ и зависнет. Цифры меняются в зависимости от кода внутри цикла.
Использование
^memory:compact[]
ситуацию с одной стороны спасает (скорость потребления памяти уменьшается), с другой стороны усложняет (конечной цифры получить не мог. т.к. при моих физических 2ГБ parser смог съесть 1,5ГБ и продолжал кушать - пришлось убить).
Добавление
^memory:compact[]
во второй цикл снимает вопрос утечки памяти. Но странно что это происходит с пустым циклом.

На форуме нашёл такое обсуждение
http://www.parser.ru/forum/?id=29159 , но ясности это мне не добавило.
Как можно управлять таким поведением parser?
Наверное в апаче есть настройка сколько памяти отводится процессу, но я её не нашёл.
И странно что зависание происходит с разными объемами памяти, и зависит от кода внутри цикла - значит какие то ограничения в парсере.
Видимо циклы это не парсеровкое :) раз на пустом цикле без сборки мусора не обойтись.