我面对这似乎有点奇怪,我EntryProcessor的行为。暂停通话
,首先我在做什么。
我的任务就是用EntryProcessor从另一个缓存A.
缓存A可以包含从100K到1M条目的数据填充高速缓存B。所以我没有选择,只能循环通过它从A数据项创建B缓存键,然后在此类键上运行EntryProcessor以创建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中的处理条目之间的暂停,特别是如果每两次调用过程方法之间出现暂停。
例如10毫秒似乎会引起暂停不正确的,可能是什么情况?
由于NDA,我无法提供代码的实例,但我编写了一个代码示例,请参见AddressMapBean#process方法 和适当的AddressBookProcessor入口处理器。
任何帮助,将不胜感激!
任何想法你的客户端应用程序以及服务器上的GC加载看起来像什么?听起来很像我的GC问题。 – noctarius
@noctarius谢谢你的回复,我正在考虑这个问题,也会试着打开gc日志记录并查看它们 – andymur