6 java ubuntu-14.04 apache-storm
当我尝试使用Storm在本地模式下运行拓扑时出现此错误
mvn compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=my.Topology
Run Code Online (Sandbox Code Playgroud)
错误是
ERROR backtype.storm.util - Async loop died!
java.lang.OutOfMemoryError: Physical memory usage is too high: physicalBytes = 3G > maxPhysicalBytes = 3G
Run Code Online (Sandbox Code Playgroud)
我该如何解决?我不知道应该增加哪个物理内存!如果我在生产模式下运行拓扑,此错误会消失吗?
更新
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 32 GB
Error Information Handle: 0x0019
Number Of Devices: 4
Run Code Online (Sandbox Code Playgroud)
我还将Apache Storm与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]
Run Code Online (Sandbox Code Playgroud)
我能够解决。我不知道您是否使用JavaCV处理视频和图像。如果是这样,并且您正在使用Maven,请确保在pom.xml中使用JavaCV 1.3.2版:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后,您需要prepare()在Bolt 中的方法中应用以下行,以更改maxPhysicalBytes的属性。
System.setProperty("org.bytedeco.javacpp.maxphysicalbytes", "0");
System.setProperty("org.bytedeco.javacpp.maxbytes", "0");
Run Code Online (Sandbox Code Playgroud)
那对我有用。错误已消失。我希望这可以帮助你。
更新
@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;
}
Run Code Online (Sandbox Code Playgroud)
这很可能意味着您的服务器空间不足。如果是 Linux 机器,请执行以下操作来检查可用内存:-
ps aux --sort -rss这会按 RSS 值对进程 RAM 消耗进行排序
RSS:驻留集大小,任务已使用的非交换物理内存(以千字节为单位)。
例子:-
zhossain@zhossain-linux1:~$ ps aux --sort -rss
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
zhossain 31934 98.2 8.2 1941088 1328536 pts/4 Rl+ 16:13 1:48 python /local/mnt/workspace/
root 2419 0.1 0.5 241156 88100 ? Sl Apr05 136:00 splunkd -h 127.0.0.1 -p 8089 restart
root 1544 0.1 0.3 740048 60820 ? Ssl Feb15 266:43 /usr/sbin/automount
root 2486 0.0 0.1 331680 28240 ? S 11:19 0:11 smbd -F
root 867 0.0 0.1 257000 27472 ? Ssl Feb15 0:22 rsyslogd
colord 1973 0.0 0.0 304988 13900 ? Sl Feb15 1:37 /usr/lib/colord/colord
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2671 次 |
| 最近记录: |