parser

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

 

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

Ответ

MoKo 21.12.2017 01:49

Думаю стоит начать с версии OS/парсера (и из пакетов он или с сайта). Тест ниже создает XML размером 369778000 байт, который успешно парсится как парсером из пакетов, так и парсером с сайта (Debian 9 x64). Если сделать заметно больше - падает, но с ошибкой "Too many heap sections", поскольку при создании XML дерева делается много аллокаций.
xml1[][i]
^for[i](0;9999){<data id="$i">
<fcontent1>content1</fcontent1>
<fcontent2>content2</fcontent2>
<fcontent3>content3</fcontent3>
<fcontent4>content4</fcontent4>
<fcontent5>content5</fcontent5>
</data>
}

@main[]
    $data[^for[i](1;200){^xml1[]}]
    ^data.length[]
    $x[^xdoc::create{<?xml version="1.0" encoding="utf-8"?><root>$data</root>}]
}

cpu $status:rusage.utime memory($status:memory.used/$status:memory.free) parser $env:PARSER_VERSION
Возможно дело не столько в размере, сколько в сложности XML, и тогда да, поддержки передачи XML_PARSE_HUGE у нас нет,
но можно самостоятельно поменять вызов в src/classes/xdoc.C по совету по ссылке:

https://stackoverflow.com/questions/24531634/libxml2-xml-parse-huge-option-for-xmlparsememory

Ну или сделать проблемный XML, а мы добавим поддержку xmlParserOption (http://xmlsoft.org/html/libxml-parser.html#xmlParserOption)