gpt4 book ai didi

java - 对于出现 OutOfMemoryError 的 Apache Ignite Grid 计算,什么是好的配置?

转载 作者:行者123 更新时间:2023-12-01 18:08:28 25 4
gpt4 key购买 nike

我想使用 Apache Ignite 的网格计算功能,但是当我在两个节点上运行程序时,我遇到了 Java 堆空间问题 (OutOfMemoryError)。为了说明这个问题,我提出了一个简单的程序来计算字符串中的单词数:

try (Ignite ignite = Ignition.start("C:/Apache-Ignite/config/test-config.xml")) {
IgniteCompute compute = ignite.compute();
String[] elements = "Count characters using callable".repeat(10000).split(" ");
Collection<IgniteCallable<Integer>> calls = new ArrayList<>();
Arrays.stream(elements).forEach(word -> calls.add((IgniteCallable<Integer>) word::length));

IgniteReducer<Integer, Integer> reducer = new IgniteReducer<>() {
private Integer sum = 0;
@Override
public boolean collect(Integer integer) {
sum += integer;
return true;
}
@Override
public Integer reduce() {
return sum;
}
};

IgniteFuture<Integer> result = compute.callAsync(calls, reducer);
System.out.println("Result : " + result.get());
}

以及 test-config.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="peerClassLoadingEnabled" value="true"/>
<property name="dataStorageConfiguration">
<bean class="org.apache.ignite.configuration.DataStorageConfiguration">
<!-- Redefining the default region's settings -->
<property name="defaultDataRegionConfiguration">
<bean class="org.apache.ignite.configuration.DataRegionConfiguration">
<property name="name" value="Default_Region"/>
<!-- Initial size. -->
<property name="initialSize" value="#{2L * 1024 * 1024 * 1024}"/>
<!-- Maximum size. -->
<property name="maxSize" value="#{2L * 1024 * 1024 * 1024}"/>
</bean>
</property>
</bean>
</property>
</bean>
</beans>

enter image description here
当我在程序执行期间观察堆时,我们可以清楚地看到堆达到了极限。也许垃圾收集器被锁定,但我不知道。

此外,如果我在单个本地节点上运行程序(以 Ignition.start("...") 开头),则没有任何问题。

最佳答案

我刚刚重新尝试了您的情况,随着 calls.size() 超过 5000,callAsync() 性能似乎变得越来越差。在您的情况下,它约为 40000,因此即使它不会导致 OOM,您也不会看到此调用的完成。

请确保将您的计算分成约 1000 次调用的批处理。实际上,建议计算工作量很大,无论如何,在您的情况下,您将花费 99% 的资源来整理工作及其参数。

尽管如此,我会针对此行为提交一张罚单。

关于java - 对于出现 OutOfMemoryError 的 Apache Ignite Grid 计算,什么是好的配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60511877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com