我還使用Apache的風暴與JavaCV(OpenCV的)獲取更多的信息。我有兩個拓撲,第二個拓撲上有兩個螺栓,一個用於將視頻分成幾個框架,另一個用於探測面孔。
我有同樣的問題:
2017-08-02 11:19:18.578 o.a.s.util Thread-5-OpenCVBolt-executor[3 3] [ERROR]
Async loop died!
java.lang.OutOfMemoryError: Physical memory usage is too high: physicalBytes = 1G > maxPhysicalBytes = 1G
at org.bytedeco.javacpp.Pointer.deallocator(Pointer.java:562) ~[stormjar.jar:?]
at org.bytedeco.javacpp.helper.opencv_core$AbstractCvMemStorage.create(opencv_core.java:1649) ~[stormjar.jar:?]
at org.bytedeco.javacpp.helper.opencv_core$AbstractCvMemStorage.create(opencv_core.java:1658) ~[stormjar.jar:?]
at OpenCVBolt.detect(OpenCVBolt.java:30) ~[stormjar.jar:?]
at OpenCVBolt.execute(OpenCVBolt.java:104) ~[stormjar.jar:?]
at org.apache.storm.daemon.executor$fn__4973$tuple_action_fn__4975.invoke(executor.clj:727) ~[storm-core-1.0.3.jar:1.0.3]
at org.apache.storm.daemon.executor$mk_task_receiver$fn__4894.invoke(executor.clj:459) ~[storm-core-1.0.3.jar:1.0.3]
at org.apache.storm.disruptor$clojure_handler$reify__4409.onEvent(disruptor.clj:40) ~[storm-core-1.0.3.jar:1.0.3]
at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:453) ~[storm-core-1.0.3.jar:1.0.3]
我能解決這個問題。我不知道你是否在使用JavaCV來處理視頻和圖像。如果是這樣,你正在使用Maven,確保你在你的pom.xml與JavaCV版本1.3.2工作:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.3.2</version>
</dependency>
然後,你需要在你博爾特適用於prepare()
方法如下行更改maxPhysicalBytes的屬性。
System.setProperty("org.bytedeco.javacpp.maxphysicalbytes", "0");
System.setProperty("org.bytedeco.javacpp.maxbytes", "0");
對我來說這是工作。錯誤消失了。我希望這可以幫助你。
UPDATE
@Override
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
System.setProperty("org.bytedeco.javacpp.maxphysicalbytes", "0");
System.setProperty("org.bytedeco.javacpp.maxbytes", "0");
_collector = collector;
}
爲什麼'maxPhysicalBytes'是3G?你正在運行一個32位的JVM嗎? – Andreas
請問,我如何知道我是否在使用32位JVM?我不知道爲什麼maxPhysicalBytes是3 GB – prog
你能提供一個完整的堆棧跟蹤嗎? –