物理内存使用率太高

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)

Mar*_*sDM 5

我还将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)


Zak*_*kir 0

这很可能意味着您的服务器空间不足。如果是 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)