Я столкнулся с поведением EntryProcessor, который казался мне немного странным.Пауза между каруселием EntryProcessor метод обработки вызовов
Прежде всего, что я делал.
Моя задача состоит в том, чтобы использовать EntryProcessor для заполнения кэш-B с данными другого кэша А.
Кэш может содержать от 100K до 1M записей. Таким образом, у меня не было выбора, кроме цикла, чтобы создать ключ кэша B из записи данных и запустить EntryProcessor на таком ключе, чтобы создать запись B-кеша.
Я обнаружил, что когда я запускаю такой цикл и строю B-кеш из A и многократно вызываю 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 logging и посмотреть на них – andymur