リモート計算ジョブを開始するときは、()またはaffinityCall()を呼び出します。リモートサーバーは6スレッドを作成し、これらのスレッドは決して終了しません。 VisualVMのは、以下を示して同じように: "・ユーティリティ#153パーセントヌル%" からリモートサーバースレッドをIgnite終了せず、メモリが不足しています。
スレッド名を "マーシャラー-cache-#14I%ヌル%" に、終了されることはありません。 クライアントが何度も繰り返し実行されると、サーバーノード上のスレッド数が急激に増加します。その結果、サーバーノードのメモリが不足します。
クライアントを閉じたときにどうすればこのスレッドを閉じることができますか。 現在の方法でクライアントを実行していない可能性があります。
クライアントコード
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スレッドがサーバー上で実行されます。投稿後に私のサーバ設定を追加します。 –