stormcrawler - ошибка переполнения стека при разборе парсера, когда http.content.limit равен -1 - PullRequest
0 голосов
/ 31 октября 2018

Storm Crawler работает в кластере Kubernetes, и мы получаем много ошибок StackOverFlow в JSoupParserBolt

java.lang.StackOverflowError at org.apache.xerces.dom.ParentNode.internalInsertBefore(Unknown Source) at org.apache.xerces.dom.ParentNode.insertBefore(Unknown Source) 
at org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source) at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:111) 
at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:136) at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:136) 
at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:136) at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:136) 
at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:136) at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:136) 
at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:136) at com.digitalpebble.stormcrawler.parse.JSoupDOMBuilder.createDOM(JSoupDOMBuilder.java:136)

Топология сканера настроена на

  worker.heap.memory.mb: 8062
  topology.worker.max.heap.size.mb: 8062
  http.content.limit: -1

может http.content.limit: -1 вызывать эту проблему?

1 Ответ

0 голосов
/ 01 ноября 2018

http.content.limit: -1 означает, что вы получите URL, пока не доберетесь до конца его содержимого. Если URL указывает на бесконечный поток, например онлайн-радио, тогда потребление памяти будет расти до тех пор, пока не произойдет сбой JVM. Это даст вам исключение нехватки памяти, и это, вероятно, не то, что здесь происходит.

РЕДАКТИРОВАТЬ: спасибо, что поделились URL. Я могу воспроизвести проблему, не могли бы вы открыть проблему на GitHub? Спасибо!

ЗАКЛЮЧЕНИЕ: это не ошибка как таковая, просто при извлечении целых документов (209 и 350 КБ) преобразование из документа JSoup в DocumentFragments требует много рекурсии и нарушает ограничение стека. Мне удалось проанализировать 2 URL, которые вы дали, установив -Xss10M в качестве аргументов виртуальной машины.

...