我在尝试使用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
4条答案
按热度按时间5cnsuln71#
我在使用dl4j.rnn时也遇到了同样的问题,在做了大量研究之后,我找到了一个资源,在这个资源中我发现必须为vm参数添加一些选项
我敢肯定,如果你调整值-xms,-xmx或xx到你的电脑规格,你会发现什么工作为你的电脑内存。
我不得不将此添加到我的vm选项中:
我使用的是一台高规格的pc机,上面的选项对我很有用,可以让我的代码运行得更快。
我希望这有帮助
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”获得更多信息
bgtovc5b3#
我还将apachestorm与javacv(opencv)结合使用。我有两个拓扑,这个过程中的第二个拓扑有两个螺栓,一个用于将视频分割成帧,另一个用于检测人脸。
我也有同样的问题:
我能解决它。我不知道你是否使用javacv来处理视频和图像。如果是这样,并且您正在使用maven,请确保在pom.xml中使用javacv版本1.3.2:
然后,您需要在
prepare()
方法来更改maxphysicalbytes的属性。那是我的工作。错误已消失。我希望这对你有帮助。
更新
9gm1akwq4#
这很可能意味着服务器空间不足。如果它是一个linux框,请执行此操作以检查是否可用memory:-
ps aux --sort -rss
这将根据rss值对进程ram消耗进行排序rss:resident set size,任务使用的非交换物理内存(以千字节为单位)。
example:-