當我啓動遠程計算作業時,調用()或affinityCall()。遠程服務器將創建6線程,並且這些線程永不退出。就像下面的VisualVM顯示:到 「編組-的cache#1141%空%」,將永遠不會結束,從 「實用程序 - #153%空%」Ignite遠程服務器線程不退出,導致內存不足最後
線程名。 如果客戶端一遍又一遍地運行,服務器節點上的線程數量將會迅速增加。結果,服務器節點內存不足。
如何在客戶端關閉時關閉此線程。 也許我不會以當前的方式運行客戶端。
客戶端代碼
String cacheKey = "jobIds";
String cname = "myCacheName";
ClusterGroup rmts = getIgnite().cluster().forRemotes();
IgniteCache<String, List<String>> cache = getIgnite().getOrCreateCache(cname);
List<String> jobList = cache.get(cacheKey);
Collection<String> res = ignite.compute(rmts).apply(
new IgniteClosure<String, String>() {
@Override
public String apply(String word) {
return word;
}
},
jobList
);
getIgnite().close();
System.out.println("ignite Closed");
if (res == null) {
System.out.println("Error: Result is null");
return;
}
res.forEach(s -> {
System.out.println(s);
});
System.out.println("Finished!");
getIgnite(),得到的Ignite的實例。
public static Ignite getIgnite() {
if (ignite == null) {
System.out.println("RETURN INSTANCE ..........");
Ignition.setClientMode(true);
ignite = Ignition.start(confCache);
ignite.configuration().setDeploymentMode(DeploymentMode.CONTINUOUS);
}
return ignite;
}
服務器配置:
<?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">
<!--
Alter configuration below as needed.
-->
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="peerClassLoadingEnabled" value="true"/>
<property name="peerClassLoadingMissedResourcesCacheSize" value="0"/>
<property name="publicThreadPoolSize" value="64"/>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>172.22.1.72:47500..47509</value>
<value>172.22.1.100:47500..47509</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
<property name="cacheConfiguration">
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="cacheMode" value="PARTITIONED"/>
<property name="memoryMode" value="ONHEAP_TIERED"/>
<property name="backups" value="0"/>
<property name="offHeapMaxMemory" value="0"/>
<property name="swapEnabled" value="false"/>
</bean>
</property>
</bean>
</beans>
目前,線程的數量不是問題。 問題是,當客戶端完成後,如何完成由該客戶端創建的服務器 節點上的線程。當客戶端一遍又一遍地運行時,服務器節點上的線程數量將快速增加。結果,服務器節點內存不足。 –
我實際上並不知道您在服務器上觀察到多少個線程?無論如何,停放的線程成本不會太高 - 只是堆棧大小,默認大約需要512k。線程數不能超過最大池大小,這是可配置的。也許你的任務有很大的內存使用量? –
每次運行作業時,都會創建6個線程。服務器從不釋放這些線程。當我跑100次。服務器上運行600個線程。我會在後綴 –