Caching 通过增加服务器堆的computejobs点燃堆缓存访问

Caching 通过增加服务器堆的computejobs点燃堆缓存访问,caching,heap,ignite,Caching,Heap,Ignite,我们有2个服务器节点、1个客户端节点和一个复制缓存 当客户端提交多个计算作业时,来自这些作业的缓存访问[get]会增加服务器堆。我认为每个访问[get]都在JVM堆中创建一个新对象。我们并行运行的计算作业越多,需要的内存就越多 由于我们的用例是只读缓存,有没有办法跨不同的计算作业重复使用同一缓存对象?默认情况下,Ignite仅以二进制形式存储数据,并在每次读取时反序列化一个值。在只读方案中,您可以通过强制Ignite保存反序列化值来更改此行为: <property name="copyOn

我们有2个服务器节点、1个客户端节点和一个复制缓存

当客户端提交多个计算作业时,来自这些作业的缓存访问[get]会增加服务器堆。我认为每个访问[get]都在JVM堆中创建一个新对象。我们并行运行的计算作业越多,需要的内存就越多


由于我们的用例是只读缓存,有没有办法跨不同的计算作业重复使用同一缓存对象?

默认情况下,Ignite仅以二进制形式存储数据,并在每次读取时反序列化一个值。在只读方案中,您可以通过强制Ignite保存反序列化值来更改此行为:

<property name="copyOnRead" value="false"/>

注意,这将增加初始内存消耗,因为每个条目都具有序列化和反序列化的值。但是,不会在每次获取时创建新对象。

感谢Val的回复。我已经对配置进行了更改以禁用“copyOnRead”,但我仍然看到服务器内存在计算作业执行期间增加。请注意,我们的设计涉及多个粒度较低的计算作业,而不是大型计算作业。我们的服务器节点在执行300万个计算作业后死亡。是否存在与此相关的问题?当然,在加载过程中会使用内存,然后会收集垃圾—这就是Java的工作方式。在同一主题中,当我的“copyOnRead”=false时,我希望在使用jvisualvm评测服务器节点时看到反序列化的对象。但是我没有看到我们的域对象,我看到的只是一个具有巨大内存的字节[]。你能帮我找到问题所在吗,下面是我对缓存的配置`CacheConfiguration cacheMapCacheCfg=新的CacheConfiguration;cacheMapCacheCfg.setCacheStoreFactoryFactoryBuilder.factoryOfCacheMapCacheStore.class;cacheMapCacheCfg.setIndexedTypesString.class,CacheMapDOWrapper.class;cacheMapCacheCfg.setCacheModeCacheMode.REPLICATED;cacheMapCacheCfg.setNameCacheNames.CACHE\u MAP\u CACHE;cacheMapCacheCfg.setCopyOnReadfalse`对象的二进制形式始终保存在缓存中。如果copyOnRead=false,Ignite还将在第一次读取时缓存反序列化的值。