我面對這似乎有點奇怪,我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