每個對儲存庫的更新都會建立新的內容修訂。 因此,隨著每次更新,儲存庫的大小都會增大。 為了避免儲存庫增長失控,需要清理舊版本以釋放磁碟資源。 此維護功能稱為「修訂清除」。 自AEM 6.0以來,它已提供離線常式。
AEM 6.3推出名為「線上修訂清除」的線上版本。 相較於必須關閉AEM例項的「離線修訂清除」,AEM例項線上時可執行「線上修訂清除」。 「線上修訂清除」預設為開啟,這是執行修訂清除的建議方式。
注意: 如需簡 介及如何使用線上修訂清除,請參閱視訊。
修訂版清除程式包含三個階段:估計、compaction和clean up。 估計會根據可能收集的廢棄項目數量決定是否執行下一階段(壓縮)。 在壓縮階段期間,會重寫tar檔案,而不會保留任何未使用的內容。 清除階段隨後會移除舊區段,包括舊區段可能包含的任何垃圾。 離線模式通常可回收更多空間,因為線上模式需要考慮AEM的工作集,而AEM的工作集會保留其他區段不會被收集。
如需修訂清除的詳細資訊,請參閱下列連結:
此外,您也可以閱讀官方Oak檔案。
建議使用「線上修訂清除」來執行修訂清除。 離線修訂清除僅能例外地使用——例如,在移轉至新儲存格式之前,或Adobe客戶服務要求您這麼做。
「線上修訂清除」依預設設定,可自動在AEM Author和Publish執行個體上每天執行一次。 您只需在使用者活動最少的時段內定義維護視窗即可。 您可以按如下方式配置「聯機修訂清除」任務:
在主AEM視窗中,前往工具——作業——儀表板——維護,或將您的瀏覽器指向:https://serveraddress:serverport/libs/granite/operations/content/maintenance.html
將滑鼠指標暫留在每日維護視窗上,然後按一下設定圖示。
輸入所需的值(重複、開始時間、結束時間),然後按一下「保存」。
或者,如果要手動運行修訂版清除任務,可以:
前往工具——操作——儀表板——維護或直接瀏覽至https://serveraddress:serverport/libs/granite/operations/content/maintenance.html
按一下每日維護窗口。
將滑鼠指標暫留在修訂清除圖示上。
按一下運行。
修訂清除程式會逐代回收舊修訂。 這意味著每次運行修訂清除時,都會建立新一代並保存在磁碟上。 但是,兩種類型的修訂清除有差異:離線修訂清除保留一代,而線上修訂清除保留兩代。 因此,當您在離線修訂清除後執行線上修訂清除時,會發生下列情況:
此外,請記住,每代提交的類型和數量與前代相比,其大小可能有所不同,因此最終大小可能因運行而異。
由於這種情況,建議將磁碟的大小至少比最初估計的儲存庫大小大兩三倍。
AEM 6.5為「 線 上修訂 清除」程 序的精簡階段提供兩種新模式:
這些壓實模式構成了效率和資源消耗之間的權衡:尾部壓實效果不明顯,對系統正常運行影響較小。 相比之下,全壓實效果更好,但對系統正常運行影響較大。
AEM 6.5也在壓縮期間引入更有效率的內容去重複化機制,進一步減少存放庫的磁碟空間。
以下兩張圖表顯示內部實驗室測試的結果,這些測試說明與AEM 6.3相比,AEM 6.5平均執行時間和磁碟平均佔用空間減少:
預設設定會在週日執行尾部壓縮,並在週日執行完整壓縮。 可以使用RevisionCleanupTask
維護任務的新配置值full.gc.days
來更改預設配置。
當您設定full.gc.days
值時,請注意,完整壓縮將在值中定義的日期期間執行,而尾部壓縮將在未定義的日期期間執行。 例如,如果您設定完整壓縮功能在週日執行,則尾部壓縮功能將在星期一到星期六執行。 例如,如果您設定完全壓縮功能以在一週中的每一天執行,則完全壓縮功能將無法執行。
此外,請考慮:
使用新的壓縮模式時,請記住以下事項:
RevisionCleanupTaskHealthCheck
表示聯機修訂清除的整體健康狀態。 它的運作方式與AEM 6.3相同,不會區分完整和尾部壓縮。TarMK GC: running tail compaction
TarMK GC: no base state available, running full compaction instead
在某些情況下,尾部和完全壓縮模式之間的交替會延遲清理過程。 更準確地說,在完全壓縮後,儲存庫將增長(其大小將翻倍)。 當儲存庫將降低到預先完全壓縮大小以下時,將在後續的尾部壓縮中回收額外空間。 還應避免並行維護任務執行。
建議將磁碟的大小至少比最初估計的儲存庫大小大兩三倍。
問題 | 答案 |
升級至AEM 6.5時,應該注意什麼? | TarMK的永續性格式將隨AEM 6.5而變更。這些更改不需要主動遷移步驟。 現有儲存庫將進行滾動遷移,該遷移對用戶是透明的。 第一次AEM 6.5(或相關工具)存取儲存庫時,就會開始移轉程式。 一旦開始移轉至AEM 6.5永續性格式,儲存庫就無法還原回先前的AEM 6.3永續性格式。 |
問題 | 答案 | |
為什麼需要遷移儲存庫? | 在AEM 6.3中,需要變更儲存格式,尤其是為了改善「線上修訂清除」的效能和效能。 這些變更不向後相容,而且必須移轉使用舊Oak Segment(AEM 6.2和舊版)建立的儲存機制。 更改儲存格式的其他好處:
|
|
是否仍支援舊版Tar格式? | AEM 6.3僅支援新的Oak Segment Tar。 | |
內容移轉一律是強制性的嗎? | 是. 除非您從新的例項開始,否則您永遠必須移轉內容。 | |
我是否可以升級至6.3,稍後再進行移轉(例如,使用其他維護視窗)? | 否,如上所述,內容移轉是強制性的。 | |
遷移時可以避免停機嗎? | 否. 這是一次性工作,無法在執行中的執行中執行。 | |
如果我意外針對錯誤的儲存庫格式運行,會發生什麼情況? | 如果您嘗試針對oak-segment-tar儲存庫執行oak-segment模組(或相反),啟動將失敗,並出現IllegalStateException訊息,訊息為「無效區段格式」。 不會發生資料損毀。 | |
是否需要重新索引搜索索引? | 否. 從oak-segment移轉至oak-segment-tar會引入容器格式的變更。 所包含的資料不受影響,也不會修改。 | |
如何最好地計算遷移期間和遷移後所需的磁碟空間? | 移轉等同於以新格式重新建立區段儲存。 這可用於估計遷移期間所需的額外磁碟空間。 遷移後,可刪除舊段儲存以回收空間。 | |
如何最佳地估計遷移的持續時間? | 如果在移轉之前執行了離線修訂清除,則移轉效能可大幅改善。 建議所有客戶在升級程式之前執行。 通常,遷移的持續時間應與離線修訂清除任務的持續時間類似,前提是離線修訂清除任務在遷移之前已經執行。 |
問題 | 答案 | |
執行「線上修訂清除」的頻率為何? | 一天一次. 這是「操作儀表板」中的預設配置。 | |
如何配置聯機修訂清除維護任務的開始時間? | 請參閱如何運行聯機修訂清除一節。 | |
線上修訂清除是否有不應超過的最大頻率? | 建議每天運行一次聯機修訂清除,預設配置。 |
|
哪些關鍵指標決定了運行「聯機修訂清除」的頻率? | 無需確定「線上修訂清除」配置為維護任務的頻率,並且它每天自動運行。 | |
為什麼「線上修訂清除」首次運行時不回收任何空間? | 線上修訂清除功能可代代代相傳舊修訂。 每次執行修訂版本清除時,都會產生新一代。 只有至少兩代的內容才會被回收,這意味著在第一次運行中,沒有什麼可回收的。 | |
為什麼第一個聯機修訂清除在離線修訂清除後運行時不會回收任何空間? | 「離線修訂清除」可回收除最新一代產品之外的所有內容,而「線上修訂清除」則可回收最新兩代產品。 對於新儲存庫,聯機修訂清除在離線修訂清除後首次執行時不會回收任何空間,因為沒有可回收的舊代。 此外,請閱讀本章的「離線修訂清除後運行線上修訂清除」一節。 |
|
「作者」和「發佈」通常會有不同的「線上修訂清除」視窗嗎? | 這取決於辦公時間和客戶線上狀態的流量模式。 維護窗口應配置在主生產時間之外,以獲得最佳的清理效果。 對於多個AEM Publish例項(TarMK Farm),「線上修訂清除」的維護視窗應錯開。 | |
運行聯機修訂清除之前是否有任何先決條件? | 「線上修訂清除」僅適用於AEM 6.3和更新版本。 此外,如果您使用舊版AEM,則需要移轉至新的Oak Segment Tar。 |
|
決定線上修訂清除持續時間的因素有哪些? | 因子為:
|
|
在執行「線上修訂清除」時,作者是否仍能工作? | 是的,「線上修訂清除」可以處理併發寫入。 不過,「線上修訂清除」在不進行並行寫入事務的情況下工作更快、更有效。 建議將「線上修訂清除」維護任務安排在相對安靜的時間,而不需要大量流量。 | |
運行聯機修訂清除時,對磁碟空間和堆記憶體的最低要求是什麼? | 在聯機修訂清除期間,會持續監視磁碟空間。 如果可用磁碟空間降至臨界值以下,則將取消該過程。 關鍵值是儲存庫當前磁碟佔用空間的25% ,且不可配置。 建議將磁碟的大小至少比最初估計的儲存庫大小大兩三倍。 清除過程中會持續監視空閒堆空間。 如果空閒堆空間降到臨界值以下,則取消該進程。 臨界值是透過org.apache.jackrabbit.oak.segment.SegmentNodeStoreService#MEMORY_THRESHOLD來設定。 預設值為15%。 Recommendations for minimum compaction heap sizing are not separed for the AEM memory sizing recommendations. 一般規則是:如果AEM例項的大小足夠足以處理使用案例和預期的負載,則清除程式將獲得足夠的記憶體。 |
|
運行線上修訂清除時預期的效能影響是什麼? | 聯機修訂清除是一個後台進程,它同時從儲存庫讀取和寫入到常規系統操作。 特別是,它可能需要在短時間內獲得對儲存庫的獨佔訪問權,以防止其他線程寫入儲存庫。 | |
「線上修訂清除」預期運行多久? | 根據我們內部執行的最新效能測試,執行時間不應超過2小時。 | |
如果「線上修訂清除」需要更長的時間,該怎麼辦? |
|
|
如果「Online Revision Cleanup(聯機修訂清除)」超過配置的維護窗口,會發生什麼情況? | 確保其他維護任務不會延遲其執行。 如果在同一維護窗口中執行的維護任務比「聯機修訂清除」還多,則可能會發生這種情況。 請注意,維護任務是按順序執行的,不具有可配置的順序。 | |
為什麼會跳過修訂版廢棄項目收集? | 「修訂清除」依賴於估計階段來判斷是否有足夠的廢棄項目需要清除。 估計器將當前大小與上次壓縮後儲存庫的大小進行比較。 如果大小超過配置的增量,則將運行清理。 大小增量設定為1 GB。 這實際上意味著,如果自上次清理運行以來儲存庫大小未增長1 GB,則將跳過新修訂清理小版本。 以下是估計階段的相關日誌條目:
|
|
如果效能影響過高,是否可以安全地中止自動壓縮? | 是. 自從AEM 6.3起,您就可透過「作業控制面板」中的「維護工作視窗」或透過JMX安全地停止它。 | |
如果AEM例項在排程的清除工作期間關閉,進程是否安全中止,或是在壓縮完成之前關閉是否被封鎖? | 修訂清除將被中斷,儲存庫將安全關閉。 | |
線上修訂清理期間,當系統崩潰時會發生什麼情況? | 在此類情況下,不存在資料損壞的風險。 垃圾剩菜將通過後續的運行進行清理。 | |
未運行聯機修訂清除會產生什麼影響? | 效能會隨時間而降低。 | |
正在收集哪些修訂? | 依預設,「線上修訂清除」只會收集至少24小時的修訂。 | |
如果並行寫入儲存庫時造成過多干擾,會發生什麼情況? | 如果系統上有寫併發,則聯機修訂清除可能需要獨佔的寫訪問權限才能在壓縮週期結束時提交更改。 如oak documentation中詳細說明,系統將進入forceCompact mode。 在強制壓縮期間,獲取獨佔寫鎖定,以便最終提交更改而不干擾任何併發寫入。 若要限制對回應時間的影響,可定義逾時值。 此值預設為1分鐘,這表示如果強制壓縮未在1分鐘內完成,則壓縮處理將中止,以利於併發提交。 力壓縮的持續時間取決於以下因素:
|
|
待機實例上如何執行聯機修訂清除? |
在冷備用設定中,只需將主實例配置為運行聯機修訂清除。 在備用實例上,無需特別計畫「線上修訂清除」。 備用實例上的相應操作是「自動清理」,這對應於「聯機修訂清理」的清理階段。 在主實例上執行聯機修訂清除後,在備用實例上運行自動清除。 估計和壓縮階段將不會在備用實例上運行。 |
|
「離線修訂清除」是否可釋放比「線上修訂清除」更多的磁碟空間? | 「離線修訂清除」可立即移除舊修訂,而「線上修訂清除」則需要考慮應用程式堆疊仍在參照的舊修訂。 因此,前者可以比後者更積極地去除垃圾,在少數垃圾收集週期中,效果被攤銷。 此外,請閱讀本章的「離線修訂清除後運行線上修訂清除」一節。 |
|
對記憶體映射檔案操作有任何考慮嗎? |
|
|
線上修訂清除期間需要監控哪些內容? |
|
|
如何檢查聯機修訂清除是否成功完成? | 通過檢查日誌,可以檢查聯機修訂清除是否已成功完成。 例如," 相應地,會出現消息" |
|
我們可以在哪裡找到上一個聯機修訂清除執行的統計資訊? | 狀態、進度和統計資訊通過JMX( 可透過 可以使用 請注意,統計資料僅自上次系統啟動後可用。 您可運用外部監控工具,讓資料不受AEM正常運作時間的限制。 請參閱AEM檔案,以附加健康狀況檢查至Nagios,做為外部監控工具的範例。 |
|
哪些相關日誌條目? |
另請參閱下面的基於錯誤消息進行故障排除一節。 |
|
如何檢查聯機修訂清除完成後回收了多少空間? | 清除週期結束時,日誌中會顯示一條消息:"TarMK GC #3: cleanup completed ",其中包括儲存庫的大小和回收的垃圾量。 |
|
在聯機修訂清除完成後如何檢查儲存庫的完整性? | 聯機修訂清除後,不需要儲存庫完整性檢查。 但是,您可以執行下列操作來檢查清理後的儲存庫狀態: |
|
如何檢測聯機修訂清除是否失敗以及恢復的步驟為何? | 失敗條件由以"TarMK GC"開頭的WARN或ERROR日誌消息標籤。 另請參閱下面的基於錯誤消息進行故障排除一節。 | |
修訂清除健康檢查中公開哪些資訊? 它們如何及何時對色彩編碼狀態層級有貢獻? | The Revision Clean-up Health Check is apt of the Operations Dashboard. 如果「聯機修訂清除」維護任務的上次執行成功,則狀態為GREEN。 如果「聯機修訂清除」維護任務被取消一次,則它將為YELLOW。 如果「聯機修訂清除」維護任務已連續取消三次,則該任務將為RED。 在這種情況下,需要手動 交互,否則「線上修訂清理」可能再次失敗。如需詳細資訊,請閱讀下方的疑難排解一節。 另請注意,系統重新啟動後,Health Check狀態將會重設。 因此,新重新啟動的實例在Revision Cleanup Health Check上將顯示綠色狀態。 您可運用外部監控工具,讓資料不受AEM正常運作時間的限制。 請參閱AEM檔案,以附加健康狀況檢查至Nagios,做為外部監控工具的範例。 |
|
如何監視備用實例上的自動清理? |
使用 您可以使用 請注意,統計資料僅在上次系統啟動後才可用。 您可運用外部監控工具,讓資料不受AEM正常運作時間的限制。 此外,請參閱AEM檔案,以附加健康檢查至Nagios,做為外部監控工具的範例。 日誌檔案還可用於檢查自動清理的狀態、進度和統計資訊。 |
|
在備用實例的「自動清理」期間需要監視哪些內容? |
|
如果不運行「線上修訂清理」,最糟糕的情況是什麼? | AEM例項將會耗用磁碟空間,這會導致生產中斷。 | |
在發佈例項上執行線上修訂清除時,使用者流量是否會有問題? | 高用戶流量會影響壓縮階段是否能成功完成。 |
|
根據Health Check和日誌條目,Online Revision Cleanup連續三次未成功完成。 要成功完成聯機修訂清除,需要執行什麼操作? | 您可以採取數個步驟來尋找並修正問題:
|
|
開啟Healthcheck警報後,需要採取哪些措施? | 請參閱上一點。 | |
如果在計畫的維護窗口期間,「線上修訂清除」超時,會發生什麼情況? | 線上修訂清除將被取消,剩菜將被刪除。 它將在下次計畫維護窗口時再次啟動。 | |
是什麼導致SegmentNotFoundException 實例記錄在error.log 中,以及如何恢復? |
當TarMK嘗試訪問它找不到的儲存單元(段)時,會記錄
|
如果在聯機修訂清除過程中發生意外,error.log將是詳細的。 以下矩陣旨在說明最常見的訊息並提供可能的解決方案:
相位 | 日誌消息 | 說明 | 後續步驟 |
---|---|---|---|
估計 | TarMK GC #2:由於壓縮已暫停,因此已跳過估計 | 當按配置在系統上禁用壓縮時,跳過估計階段。 | 啟用「線上修訂清除」。 |
TarMK GC #2:估計中斷:${REASON}。 正在跳過壓縮。 | 估計相位提前終止。 可能中斷估計階段的一些事件範例:主機系統記憶體或磁碟空間不足。 | 這取決於具體原因。 | |
壓縮 | TarMK GC #2:已暫停 | 只要壓縮階段被配置暫停,則估計階段和壓縮階段都不會執行。 | 啟用線上修訂清除。 |
TarMK GC #2:壓縮已取消:${REASON}。 | 壓縮階段提前終止。 可能中斷壓縮階段的一些事件範例:主機系統記憶體或磁碟空間不足。 此外,還可以通過關閉系統或通過管理介面(如操作控制面板中的維護窗口)明確取消壓縮來取消壓縮。 | 這取決於具體原因。 | |
TarMK GC #2:compaction失敗,在32.902分鐘(1974140毫秒)後,經過5個週期 | 此訊息並不表示發生不可復原的錯誤,但只有壓縮在經過一定的嘗試後才終止。 另請閱讀後段。 | 閱讀以下Oak documentation和 Running Online Revision Cleanup一節的最後一個問題。 | |
清理 | TarMK GC #2:清除中斷 | 已通過關閉儲存庫來取消清理。 預期不會影響一致性。 此外,磁碟空間很可能無法完全回收。 將在下次修訂版清理週期中回收。 | 調查為何關閉了儲存庫,並且繼續嘗試避免在維護窗口期間關閉儲存庫。 |
您必鬚根據AEM安裝中使用的Oak版本,使用不同版本的Oak-run工具。 請在使用此工具之前,先檢查下列版本需求清單:
對於Oak版本1.0.0到1.0.11或1.1.0到1.1.6,請使用Oak-run版本 1.0.11
對於比上述更新的Oak版本,請使用符合您AEM安裝Oak核心的Oak-run版本。
Adobe提供名為Oak-run的工具,用於執行修訂清除。 您可從下列位置下載:
https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/
此工具是可運行的jar,可手動運行以壓縮儲存庫。 此過程稱為離線修訂清除,因為必須關閉儲存庫才能正確運行工具。 請務必根據您的維護窗口規劃清理。
有關如何提高清除過程效能的提示,請參閱 Inderage the Performance of Offline Revision Cleanup。
您也可以在維護作業開始前清除舊查核點(以下程式中的步驟2和3)。 建議僅適用於擁有100個以上查核點的例項。
請務必確認您有AEM例項的最近備份。
關閉AEM。
(選用)使用工具尋找舊查核點:
java -jar oak-run.jar checkpoints install-folder/crx-quickstart/repository/segmentstore
(可選)然後,刪除未參考的查核點:
java -jar oak-run.jar checkpoints install-folder/crx-quickstart/repository/segmentstore rm-unreferenced
執行壓縮並等待它完成:
java -jar -Dsun.arch.data.model=32 oak-run.jar compact install-folder/crx-quickstart/repository/segmentstore
Oak-run工具提供多項功能,旨在提高修訂版清除程式的效能,並盡可能減少維護視窗。
該清單包括幾個命令行參數,如下所述:
-mmap。 您可以將此設定為true或false。如果設定為true,則使用記憶體映射訪問。 如果設為false,則會使用檔案存取。 如果未指定,則64位系統將使用記憶體映射訪問,32位系統將使用檔案訪問。 在Windows上,一律會強制執行一般檔案存取,並忽略此選項。 此參數已取代-Dtar.memoryMapped參數。
-Dupdate.limit。定義臨時事務刷新到磁碟的閾值。 預設值為10000。
-Dcompress-interval。壓縮當前映射之前要保留的壓縮映射條目數。 預設值為100000。 如果有足夠的堆記憶體可用,則應將此值增加到更高的數目,以加快吞吐量。 此參數已在Oak 1.6版中移除,且無效。
-Dcompaction-progress-log。將記錄的壓縮節點數。 預設值為150000,這表示操作期間將記錄前150000個壓縮節點。 請搭配使用這個參數,並搭配下列說明的下一個參數。
-Dtar.PersistCompactionMap。 將此參數設定為true可使用磁碟空間而不是堆記憶體來保存壓縮映射。需要oak-run工具1.4版及更新版本。 如需詳細資訊,請參閱離線修訂清除常見問題一節中的問題3。 此參數已在Oak 1.6版中移除,且無效。
-force。 強制壓縮並忽略非相符的區段儲存版本。
使用--force
參數會將區段商店升級至最新版本,這與舊版Oak版本不相容。 此外,考慮到不可能降級。 一般而言,您應謹慎使用這些參數,而且您必須對如何使用這些參數有相關知識。
使用中參數的範例:
java -Dupdate.limit=10000 -Dcompaction-progress-log=150000 -Dlogback.configurationFile=logback.xml -Xmx8g -jar oak-run-*.jar checkpoints <repository>
除了上述方法外,您也可以使用JMX控制台觸發修訂清除機制,如下所示:
決定「離線修訂清除」持續時間的因素有哪些? | 儲存庫大小和需要清理的修訂量決定了清理的持續時間。 |
修訂版和頁面版本之間有何差異? |
|
如果離線修訂清除任務在8小時內未完成,如何加快它? | 如果修訂版任務在8小時內未完成,且線程轉儲顯示主熱點是InMemoryCompactionMap.findEntry ,請將下列參數與oak-run工具1.4 版或更高版本一起使用:-Dtar.PersistCompactionMap=true 。 請注意,-Dtar.PersistCompactionMap 參數已在Oak 1.6版中移除。 |