物理内存使用率太高

qfe3c7zg  于 2021-06-24  发布在  Storm
关注(0)|答案(4)|浏览(652)

我在尝试使用storm以本地模式运行拓扑时遇到了这个错误

mvn compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=my.Topology

错误是

ERROR backtype.storm.util - Async loop died!
java.lang.OutOfMemoryError: Physical memory usage is too high: physicalBytes = 3G > maxPhysicalBytes = 3G

我该怎么解决?我不知道该增加哪种物理记忆!如果我在生产模式下运行拓扑,这个错误会消失吗?
更新

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
5cnsuln7

5cnsuln71#

我在使用dl4j.rnn时也遇到了同样的问题,在做了大量研究之后,我找到了一个资源,在这个资源中我发现必须为vm参数添加一些选项

-Xms1024m
-Xmx10g
-XX:MaxPermSize=2g

我敢肯定,如果你调整值-xms,-xmx或xx到你的电脑规格,你会发现什么工作为你的电脑内存。
我不得不将此添加到我的vm选项中:

-Xms5024m -Xmx10g -XX:MaxPermSize=6g

我使用的是一台高规格的pc机,上面的选项对我很有用,可以让我的代码运行得更快。
我希望这有帮助

7ivaypg9

7ivaypg92#

我在openjdk8或openjdk9代码库中找不到“物理内存使用率过高”的消息,因此我怀疑它来自apachestorm/spark使用的本机代码库。
如果你能提供一个stacktrace帮助追踪“罪魁祸首”。
以下不是“基于证据的”。。。
我不知道该增加哪种物理记忆!
这将取决于实际原因是什么。可能性包括:
你的java堆太小了。
由于体系结构的原因,jvm无法将堆扩展到配置的最大值;e、 g.您运行的是32位jvm,它不能提供足够大的地址空间。
操作系统拒绝扩展进程内存,因为它没有足够的物理内存或交换空间。
由于“ulimit”或类似的资源限制,操作系统拒绝扩展进程内存。
我希望以上所有的诊断方法都不同。。。只是看起来诊断(即错误消息)显然不是来自jvm本身。
上述问题可能由以下原因引起/触发:
各种可配置的限制可能设置得太小
使用32位jvm
你的机器太小了;i、 获得更多的物理内存!
你的问题太大了。
您的应用程序有缺陷或内存泄漏。
如果我在生产模式下运行拓扑,这个错误会消失吗?
无法预测。
更新-根据stacktrace,很明显错误消息来自 org.bytedeco.javacpp 图书馆。特别是 Pointer 班级(源代码。)
查看源代码,问题与名为“maxphysicalmemory”的可配置参数有关,该参数由“org.bytedeco.javacpp.maxphysicalbytes”系统属性配置。
尝试更改该属性。
你可以通过google“org.bytedeco.javacpp.maxphysicalbytes”获得更多信息

bgtovc5b

bgtovc5b3#

我还将apachestorm与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");

那是我的工作。错误已消失。我希望这对你有帮助。
更新

@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;
}
9gm1akwq

9gm1akwq4#

这很可能意味着服务器空间不足。如果它是一个linux框,请执行此操作以检查是否可用memory:- ps aux --sort -rss 这将根据rss值对进程ram消耗进行排序
rss:resident set size,任务使用的非交换物理内存(以千字节为单位)。
example:-

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

相关问题