繁体   English   中英

stormcrawler-http.content.limit为-1时解析器螺栓上的stackoverflow错误

[英]stormcrawler - stackoverflow error on parser bolt when http.content.limit is -1

Storm Crawler在Kubernetes集群中运行,我们在JSoupParserBolt中收到许多StackOverFlow错误

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导致此问题?

http.content.limit:-1表示您将获取一个URL,直到到达其内容的末尾。 如果URL指向无尽的流(例如,在线广播),则内存消耗将增加,直到JVM崩溃为止。 这将给您一个内存不足的异常,并且可能不是这里发生的事情。

编辑:感谢您共享URL。 我可以重现问题,您介意在GitHub上发布问题吗? 谢谢!

结论:这并不是一个错误,只是当获取整个文档(209和350Kb)时,从JSoup文档到DocumentFragments的转换涉及很多递归并导致堆栈限制崩溃。 通过将-Xss10M设置为VM参数,我设法解析了您提供的2个URL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM