Caching hazelcast EntryProcessor进程方法调用之间的暂停

Caching hazelcast EntryProcessor进程方法调用之间的暂停,caching,hazelcast,Caching,Hazelcast,我面对入口处理器的行为,这对我来说似乎有点奇怪 首先,我在做什么 我的任务是使用EntryProcessor从另一个缓存A的数据填充缓存B 缓存A可以包含100K到1M个条目。所以我别无选择,只能从一个数据条目中循环创建B缓存项,并在该项上运行EntryProcessor来创建B缓存项 我发现,当我从A运行这样的循环并构建B缓存并多次调用EntryProcessor(数量等于缓存A中的条目数量)时,总的持续时间会不时地发生变化 所以我开始在程序的每个步骤中编写日志。有时,条目处理器在对多个条目执

我面对入口处理器的行为,这对我来说似乎有点奇怪

首先,我在做什么

我的任务是使用EntryProcessor从另一个缓存A的数据填充缓存B

缓存A可以包含100K到1M个条目。所以我别无选择,只能从一个数据条目中循环创建B缓存项,并在该项上运行EntryProcessor来创建B缓存项

我发现,当我从A运行这样的循环并构建B缓存并多次调用EntryProcessor(数量等于缓存A中的条目数量)时,总的持续时间会不时地发生变化

所以我开始在程序的每个步骤中编写日志。有时,条目处理器在对多个条目执行期间会暂停运行,请参阅日志

16:47:17.773 ce23b7a [thread-7] AppendingProcessor process process; enter 
16:47:17.773 7d9a120 [thread-7] AppendingProcessor process process; exit 

Pause between two threads (invocation on different keys) is about 10ms (which   could give us 100s on 100k keys!) 

16:47:17.782 ce23b7a [thread-0] AppendingProcessor process process; enter 
16:47:17.782 7d9a120 [thread-0] AppendingProcessor process process; exit 
有时,我们可以看到另一种行为,在不同条目上执行时没有任何停顿或有很小的停顿

14:38:42.685 ce23b7a [thread-0] AppendingProcessor process - process; enter 
14:38:42.685 7d9a120 [thread-0] AppendingProcessor process - process; exit 

14:38:42.686 ce23b7a [thread-1] AppendingProcessor process - process; enter 
14:38:42.686 7d9a120 [thread-1] AppendingProcessor process - process; exit 

14:38:42.686 ce23b7a [thread-6] AppendingProcessor process - process; enter 
14:38:42.686 7d9a120 [thread-6] AppendingProcessor process - process; exit 
我认为这可能与分区有关,因此可能与我有多少分区以及entryprocessor是否使用来自同一分区的条目有关,但现在我认为情况并非如此

有时,当我运行代码时,它会在许多条目上不暂停地工作,然后暂停(通常为10毫秒),然后再不暂停地工作

2016-10-25 18:23:34.486 [thread-2] AppendingProcessor - process.exit; partId = 114
....
about 500 entries processed in 1 ms
...
2016-10-25 18:23:34.486 [thread-3] AppendingProcessor - process.exit; partId = 115
....
about 250 entries processed in 1 ms
...
2016-10-25 18:23:34.487 [thread-3] AppendingProcessor - process.exit; partId = 115
我的问题是EntryProcessor中处理条目之间的暂停可能是什么原因,特别是如果在两次调用process方法之间发生暂停

因为这样的10毫秒暂停似乎不正确,可能是什么情况

由于NDA的原因,我无法提供真实的代码示例,但我编写了一个代码示例,请参见方法 和适当的输入处理器


任何帮助都将不胜感激

您是否从A读取数据并将其放入处理器内的B中?如果是这样的话,就有陷入僵局的风险。见: 另见:

另一个(可能)可能的原因是线程争用。从文件:

注意:条目处理器通过专用于 特定分区。因此,使用长时间运行的入口处理器 执行时,不能执行其他分区操作,如map.put(key) 处理。记住这一点,这是一个很好的做法,使您的条目 尽可能快地执行处理器


您是否在处理器中读取A并将其放入B?如果是这样的话,就有陷入僵局的风险。见: 另见:

另一个(可能)可能的原因是线程争用。从文件:

注意:条目处理器通过专用于 特定分区。因此,使用长时间运行的入口处理器 执行时,不能执行其他分区操作,如map.put(key) 处理。记住这一点,这是一个很好的做法,使您的条目 尽可能快地执行处理器


你知道你的GC加载在客户端应用程序和服务器上是什么样子吗?听起来很像是GC问题。@noctarius感谢您的回复,我正在考虑这一点,will也会尝试打开GC日志并查看它们。您知道GC加载在客户端应用程序和服务器上是什么样子吗?听起来很像GC问题。@noctarius感谢您的回复,我正在考虑这一点,将尝试打开GC日志并查看它们。No reading,我在entry processor内的B上创建了新条目,但在启动前将a中的数据放入EP,因此我认为这不是第一种情况。但可能是第二个。顺便问一下,当条目处理器工作时,是否可以读取(不是输入,而是获取)条目?是否可以不读取此条目,而是从同一分区读取条目?谢谢。不用阅读,我在条目处理器内的B上创建了新条目,但在开始之前将A中的数据放入EP,所以我认为这不是第一种情况。但可能是第二个。顺便问一下,当条目处理器工作时,是否可以读取(不是输入,而是获取)条目?是否可以不读取此条目,而是从同一分区读取条目?谢谢