AEM內部重新索引程式會收集存放庫資料並將其儲存在Oak索引中,以支援內容的效能查詢。 在特殊情況下,流程可能會變得緩慢甚至停滯。 本頁提供疑難排解指南,協助您識別索引速度是否緩慢、找出原因並解決問題。
請務必區分需要花費不適當長時間重新索引與需要長時間重新索引的重新索引,因為這會索引大量內容。 例如,為內容建立索引所需的時間會隨著內容量而調整,因此大型生產存放庫重新建立索引所需的時間會比小型開發存放庫長。
請參閱 關於查詢和索引的最佳實務 以取得何時及如何重新索引內容的詳細資訊。
初始偵測緩慢索引需要檢閱 IndexStats
JMX MBean。 在受影響的AEM執行個體上,執行下列動作:
開啟Web主控台,然後按一下JMX標籤或前往https://<host>:<port>/system/console/jmx (例如, http://localhost:4502/system/console/jmx)。
導覽至 IndexStats
Mbeans。
開啟 IndexStats
「 」的MBean async
「和」 fulltext-async
「。
對於兩個MBean,檢查 完成 時間戳記和 LastIndexTime 時間戳記距離目前時間少於45分鐘。
對於任一MBean,如果時間值(完成 或 LastIndexTime)的時間超過目前時間的45分鐘,則索引作業會失敗或花費太長時間。 此問題會導致非同步索引過時。
強制關機導致AEM在重新啟動後暫停非同步索引達30分鐘。 此外,通常需要15分鐘才能完成第一個重新索引階段,總共約為45分鐘(連結回 初始偵測 45分鐘的時間範圍)。 如果索引在強制關閉後暫停:
首先,判斷該AEM執行個體是否以強制方式關閉(強制終止AEM程式,或發生電源故障),然後重新啟動。
如果發生強制關閉,重新啟動時,AEM會自動暫停重新索引達30分鐘。
請等候約45分鐘,讓AEM繼續正常的非同步編制索引作業。
對於AEM 6.1,請確保 AEM 6.1 CFP 11 已安裝。
在特殊情況下,用來管理非同步索引的對話串池可能會變得超載。 若要隔離索引過程,可以設定對話串集區,以防止其他AEM工作干擾Oak及時索引內容的能力。 在這種情況下,請執行以下作業:
定義新的獨立執行緒集區,以供Apache Sling Scheduler用於非同步索引:
確認新的Apache Sling排程器執行緒集區已註冊,並顯示在Apache Sling排程器狀態Web主控台中。
導覽至「AEM OSGi Web主控台」>「狀態」>「Sling排程器」,或前往https://<host>:<port>/system/console/status-slingscheduler (例如, http://localhost:4502/system/console/status-slingscheduler)
確認下列集區專案存在:
如果在短時間內對存放庫進行了太多變更和認可,則索引可能會由於完整的觀察佇列而延遲。 首先,判斷觀察佇列是否已滿:
前往Web主控台,然後按一下JMX標籤或前往https://<host>:<port>/system/console/jmx (例如, http://localhost:4502/system/console/jmx)
開啟Oak存放庫統計資料MBean並判斷是否有 ObservationQueueMaxLength
值大於10,000。
per second
部分),因此確認 ObservationQueueMaxLength
的秒數量度是0。missRate
的 DocChildren
中的快取 Consolidated Cache
統計MBean。為避免超過可接受的觀察佇列限制,建議執行以下操作:
DiffCache
如所述 效能調整秘訣> Mongo儲存調整>檔案快取大小.在以下兩種情況下,重新索引可被視為「完全卡住」:
重新索引速度很慢,以至於記錄檔案中並未報告有關已遍及節點數的顯著進度。
如果記錄檔案中出現重複的例外狀況(例如, OutOfMemoryException
)。 記錄中重複出現一或多個相同的例外狀況,表示Oak嘗試重複索引相同專案,但因相同問題而失敗。
若要識別並修正停滯的重新索引程式,請執行下列動作:
若要找出索引卡住的原因,必須收集下列資訊:
收集5分鐘的執行緒傾印,每2秒傾印一次。
從非同步處理收集資料 IndexStats
MBean:
導覽至AEM OSGi Web Console>Main>JMX>IndexStat>async
使用 oak-run.jar的主控台模式 以收集底下存在的詳細資訊* /:async
*節點。
使用收集存放庫查核點清單 CheckpointManager
MBean:
AEM OSGi Web Console>Main>JMX>CheckpointManager>listCheckpoints()
收集步驟1中概述的所有資訊後,請重新啟動AEM。
可透過以下方式安全地中止重新索引(在完成之前停止) async, async-reindex
和f ulltext-async
索引通道( IndexStats
Mbean)。 如需詳細資訊,另請參閱上的Apache Oak檔案 如何中止重新索引. 此外,請考量下列事項:
PropertyIndexAsyncReindexMBean
.若要安全地中止重新索引,請執行下列步驟:
識別控制必須停止的重新索引通道的IndexStats MBean。
請前往AEM OSGi Web Console>Main>JMX或https:// ,透過JMX主控台導覽至適當的IndexStats MBean<host>:<port>/system/console/jmx (例如, http://localhost:4502/system/console/jmx)
根據您想要停止的重新索引路線開啟IndexStats MBean ( async
, async-reindex
,或 fulltext-async
)
async
, async-reindex
,或 fulltext-async
.叫用 abortAndPause()
命令於適當的 IndexStats
MBean。
適當地標籤Oak索引定義,以防止在索引通道恢復時恢復重新索引。
重新索引時 現有 索引,將重新索引屬性設定為false
/oak:index/someExistingIndex@reindex=false
否則,針對 新 索引:
將type屬性設定為disabled
/oak:index/someNewIndex@type=disabled
或完全移除索引定義
完成時將變更提交至存放庫。
最後,繼續對中止的索引通道進行非同步索引。
IndexStats
發出 abortAndPause()
命令時,請叫用 resume()
命令。最好在靜默期(例如,不在大型內容擷取期間)重新索引,最好在已知並控制AEM載入的維護期間重新索引。 此外,請確定重新索引不會在其他維護活動期間發生。