[英]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.