每個對儲存庫的更新都會建立新的內容修訂。 因此,每次更新時,存放庫的大小都會增加。 為避免儲存庫增長失控,需要清理舊修訂版本以釋放磁碟資源。 此維護功能稱為修訂清除。 自AEM 6.0起,已可作為離線常式使用。
在AEM 6.3及更新版本中,引入了名為「線上修訂清除」的線上版本功能。 與必須關閉AEM例項的離線修訂清除相比,當AEM例項上線時,可執行線上修訂清除。 「線上修訂清除」預設為開啟,這是執行修訂清除的建議方式。
附註: 請參閱影片 以了解簡介及如何使用「線上修訂清除」。
修訂清除程式包含三個階段: 估計, 壓實 和 清理. 估計會根據可收集的垃圾量,決定是否要執行下一階段(壓縮)。 壓縮階段期間,會重寫區段和tar檔案,留下任何未使用的內容。 清理階段隨後移除了舊段,包括它們可能包含的任何垃圾。 離線模式通常可節省更多空間,因為線上模式需要考慮AEM工作集,而這會保留其他區段無法收集。
如需「修訂清除」的詳細資訊,請參閱下列連結:
此外,您也可以閱讀 官方Oak檔案。
執行修訂清除的建議方式是「線上修訂清除」。 離線修訂清除應僅在例外情況下使用,例如,在遷移至新儲存格式之前,或如果Adobe客戶服務要求您執行此操作,則應先使用。
依預設,「線上修訂清除」會設定為在AEM製作和發佈執行個體上每天自動執行一次。 您只需在使用者活動最少的期間內定義維護期間即可。 您可以依照下列方式設定「線上修訂清除」任務:
在主AEM視窗中,前往 工具 — 操作 — 儀表板 — 維護 或將瀏覽器指向: https://serveraddress:serverport/libs/granite/operations/content/maintenance.html
暫留在 每日維護窗口 並按一下 設定 表徵圖。
輸入所需值(重複、開始時間、結束時間),然後按一下 儲存.
或者,如果要手動運行修訂清除任務,可以:
前往 工具 — 操作 — 儀表板 — 維護 或直接瀏覽至 https://serveraddress:serverport/libs/granite/operations/content/maintenance.html
按一下 每日維護窗口.
暫留在 修訂清除 表徵圖。
按一下 執行.
修訂清除程式會逐代回收舊修訂。 這表示每次執行修訂清除時,都會建立新的一代並保留在磁碟上。 不過,兩種修訂清除類型之間有差異:離線修訂清除會保留一代,而線上修訂清除會保留兩代。 所以,當您執行線上修訂清除時 after 離線修訂清除會發生下列情況:
另外,請記住,根據提交的類型和數量,每代的大小都可能與前一代不同,因此最終大小可能因一次運行而異。
因此,建議將磁碟的大小至少比最初估計的儲存庫大小大兩三倍。
AEM 6.5 簡介 兩種新模式 針對 壓實 「線上修訂清除」過程的階段:
這些壓縮模式構成了效率和資源消耗之間的權衡:尾部壓實效果差,對系統正常運行影響小。 相比之下,全壓實效果更好,但對系統正常運行影響較大。
AEM 6.5也導入了壓縮期間更有效的內容重複資料刪除機制,進一步減少存放庫的磁碟空間。
下面的兩張圖表呈現了內部實驗室測試的結果,這些測試說明與AEM 6.3相比,AEM 6.5中磁碟的平均執行時間和平均佔用空間減少了:
預設設定會在周天執行尾部壓縮,並在週日執行完全壓縮。 使用新配置值可以更改預設配置 full.gc.days
的 RevisionCleanupTask
維護任務.
當您設定 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時,應注意什麼? | AEM 6.5會變更TarMK的持續性格式。這些變更不需要主動移轉步驟。 現有存放庫會執行滾動式移轉,對使用者而言是透明的。 AEM 6.5(或相關工具)首次存取存放庫時,就會啟動移轉程式。 一旦開始移轉至AEM 6.5永續性格式,存放庫就無法還原回先前的AEM 6.3永續性格式。 |
問題 | 答案 | |
為何需要遷移儲存庫? | 在AEM 6.3中,需要更改儲存格式,特別是為了改進線上修訂清理的效能和效果。 這些變更不向後相容,且以舊Oak區段(AEM 6.2和舊版)建立的存放庫必須移轉。 更改儲存格式的其他好處:
|
|
仍支援舊版Tar格式嗎? | AEM 6.3或更新版本僅支援新的Oak Segment Tar。 | |
內容移轉一律為強制項目嗎? | 可以。除非您從最新的例項開始,否則您永遠必須移轉內容。 | |
我是否可升級至6.3或更新版本,稍後再進行移轉(例如,使用其他維護視窗)? | 否,如上所述,內容移轉是強制性的。 | |
遷移時可以避免停機嗎? | 否. 這是一次性作業,無法在執行中的執行個體上完成。 | |
如果不小心執行錯誤的存放庫格式,會發生什麼事? | 如果您嘗試對oak-segment-tar存放庫執行oak-segment模組(或反之),啟動會因 IllegalStateException 顯示訊息「區段格式無效」。 不會發生資料損壞。 | |
是否需要重新索引搜索索引? | 否. 從oak-segment移轉至oak-segment-tar會導致容器格式的變更。 包含的資料不受影響,不會修改。 | |
如何最佳地計算遷移期間和遷移後所需的預期磁碟空間? | 移轉等同於以新格式重新建立區段存放區。 這可用於估計遷移期間所需的額外磁碟空間。 遷移後,可以刪除舊的段儲存以回收空間。 | |
如何最佳估計移轉的持續時間? | 如果 離線修訂清除 會在移轉前執行。 建議所有客戶在升級程式前先執行此作業。 一般而言,移轉的持續時間應與離線修訂清除任務的持續時間類似,假設離線修訂清除任務已在移轉前執行。 |
問題 | 答案 | |
執行「線上修訂清除」的頻率為何? | 一天一次. 這是「操作控制面板」中的預設配置。 | |
如何配置線上修訂清除維護任務的開始時間? | 請參閱 如何執行線上修訂清除 區段。 | |
線上修訂清除是否有不應超過的最大頻率? | 建議您依預設設定,每天執行一次線上修訂清除。 |
|
決定線上修訂清除執行頻率的關鍵指標為何? | 無需確定頻率,因為「線上修訂清除」已設定為維護任務,且每天會自動執行。 | |
為什麼「線上修訂清除」第一次運行時沒有回收任何空間? | 線上修訂清除會按代回收舊修訂。 每次執行修訂清除時,都會產生新的層代。 只有至少兩代的內容才會被回收,這意味著在第一次運行中,沒有什麼可回收的。 | |
在離線修訂清除後執行時,第一個線上修訂清除為何不會回收任何空間? | 離線修訂清除將回收除最新一代之外的所有內容,而線上修訂清除則需回收最新兩代。 若是新的存放庫,線上修訂清除在離線修訂清除後首次執行時,不會回收任何空間,因為沒有足夠可回收的代數。 此外,請參閱以下的「離線修訂清除後執行線上修訂清除」一節: 本章. |
|
製作和發佈通常會有不同的「線上修訂清除」視窗嗎? | 這取決於客戶的上班時間和線上狀態的流量模式。 維護窗口應配置在主生產時間之外,以獲得最佳的清理效果。 若為多個AEM發佈執行個體(TarMK伺服器陣列),「線上修訂清除」的維護視窗應交錯開來。 | |
執行線上修訂清除之前是否有任何先決條件? | 「線上修訂清除」僅適用於AEM 6.3及更新版本。 此外,如果您使用舊版AEM,則需要移轉至新 Oak Segment Tar. |
|
決定線上修訂清除持續時間的因素有哪些? | 因素包括:
|
|
執行線上修訂清除時,作者仍可工作嗎? | 是的,線上修訂清除可以處理併發寫入。 但是,「線上修訂清除」可以更快、更高效地運行,而無需同時執行寫入事務。 建議將「線上修訂清除」維護任務安排到相對安靜的時間,而不需要大量流量。 | |
運行「聯機修訂清除」時,磁碟空間和堆記憶體的最低要求是什麼? | 線上修訂清除期間會持續監控磁碟空間。 如果可用磁碟空間降至關鍵值以下,該過程將被取消。 關鍵值是儲存庫當前磁碟佔用量的25%,且不可配置。 建議將磁碟的大小至少比最初估計的儲存庫大小大兩三倍。 清除過程中會持續監視空閒堆空間。 如果空閒堆空間降至關鍵值以下,則取消該進程。 關鍵值是透過org.apache.jackrabbit.oak.segment.SegmentNodeStoreService#MEMORY_THRESHOLD設定。 預設值為15%。 Recommendations的最小壓縮堆大小調整不會與AEM記憶體大小調整建議分開。 一般規則是: 如果AEM例項的大小足以應付使用案例和其上預期的裝載,清理程式將會取得足夠的記憶體。 |
|
運行線上修訂清除時預期的效能影響是什麼? | 「線上修訂清除」是一個後台進程,它從儲存庫中讀取資料,並將資料寫入正常的系統操作。 尤其是,它可能需要在短時間內獲得對儲存庫的獨佔訪問權,從而阻止其他線程寫入儲存庫。 | |
線上修訂清除預計會執行多久? | 根據我們內部執行的最新效能測試,執行時間不應超過2小時。 | |
如果「線上修訂清除」需要更長時間,該怎麼辦? |
|
|
如果「線上修訂清除」超過配置的維護窗口,會發生什麼情況? | 確保其他維護任務不會延遲其執行。 如果在同一維護窗口中執行的維護任務比「線上修訂清除」更多,則可能會是這種情況。 請注意,維護任務是按順序執行的,不具有可配置的順序。 | |
為什麼跳過修訂垃圾收集? | 「修訂清理」依賴於估計階段來確定是否有足夠的垃圾可清理。 估算程式會比較目前的大小與上次壓縮後存放庫的大小。 如果大小超過設定的增量,則清除將運行。 大小增量設定為1 GB。 這實際上表示,如果儲存庫大小自上次清除執行以來未增加1 GB,則會略過新的修訂清除迭代。 以下是估計階段的相關日誌條目:
|
|
如果效能影響太大,是否可以安全地中止自動壓縮? | 可以。自AEM 6.3起,它可通過Operations Dashboard中的Maintenance Task Window或JMX安全地停止。 | |
如果AEM執行個體在排程的清除任務期間關閉,程式是否會安全中止,或是在壓縮完成前關閉會遭到封鎖? | 修訂清除將中斷,存放庫將安全關閉。 | |
線上修訂清除期間系統當機時會發生什麼事? | 在此類情況下,資料不會損壞。 垃圾剩料將被後續運行清理。 | |
未運行線上修訂清除會產生什麼影響? | 效能隨時間而降低。 | |
正在收集哪些修訂版本? | 依預設,「線上修訂清除」只會收集至少24小時以前的修訂。 | |
如果同時寫入存放庫時受到的干擾過多,會發生什麼情況? | 如果系統上存在寫併發,線上修訂清除可能需要獨佔的寫訪問權才能在壓縮週期結束時提交更改。 系統會進入 forceCompact模式,如 oak檔案. 在強制緊縮期間,獲取獨佔寫鎖,以便最終提交更改而不會任何併發寫入干擾。 若要限制對回應時間的影響,可以定義逾時值。 此值預設為1分鐘,這表示如果強制壓縮未在1分鐘內完成,壓縮過程將中止,以支援併發提交。 力緊的持續時間取決於以下因素:
|
|
如何在備用執行個體上執行線上修訂清除? |
在冷備用設定中,只需將主實例配置為運行聯機修訂清除。 在備用執行個體上,不需要特別排程線上修訂清除。 備用執行個體上的對應操作是「自動清除」 ,這對應於「線上修訂清除」的清除階段。 在主實例上執行「線上修訂清除」後,在備用實例上運行「自動清除」。 估計階段和壓縮階段不會在備用執行個體上執行。 |
|
離線修訂清除是否能釋放比線上修訂清除更多的磁碟空間? | 離線修訂清除可以立即移除舊修訂,而線上修訂清除需要考慮應用程式堆疊仍在參照的舊修訂。 因此,前者比後者更積極地去除垃圾,在幾個垃圾收集週期中,效果被攤銷。 此外,請參閱以下的「離線修訂清除後執行線上修訂清除」一節: 本章. |
|
有關記憶體映射檔案操作的注意事項嗎? |
|
|
線上修訂清除期間需要監控哪些項目? |
|
|
如何檢查線上修訂清除是否成功完成? | 您可以檢查記錄檔,以檢查「線上修訂清除」是否已成功完成。 例如,「 相應地,會出現消息「 |
|
我們可以在哪裡找到上次線上修訂清除執行的統計資料? | 狀態、進度和統計資訊會透過JMX公開( 進度可透過 您可以使用 請注意,統計資料僅自上次系統啟動後可用。 可運用外部監控工具,讓資料超出AEM正常運作時間。 請參閱 將健康狀態檢查附加至Nagios的AEM檔案,作為外部監控工具的範例. |
|
相關記錄項目為何? |
另請參閱 根據錯誤訊息進行疑難排解 一節。 |
|
如何檢查線上修訂清除完成後回收了多少空間? | 清理週期結束時,日誌中會顯示一條消息:"TarMK GC #3: cleanup completed 「包括儲存庫的大小和回收的垃圾量。 |
|
線上修訂清除完成後,如何檢查存放庫的完整性? | 線上修訂清除後,不需要存放庫完整性檢查。 不過,您可以執行下列動作,在清除後檢查存放庫狀態: |
|
如何檢測聯機修訂清除是否失敗,以及要恢復的步驟是什麼? | 失敗條件會以「TarMK GC」開頭的「WARN」或「ERROR」記錄訊息標示。 另請參閱 根據錯誤訊息進行疑難排解 一節。 | |
修訂清除運行狀況檢查中公開了哪些資訊? 它們對色彩編碼狀態層級有何貢獻? | 修訂清理運行狀況檢查是 操作儀表板. 狀態將為 綠色 如果「線上修訂清理」維護任務的上次執行已成功完成。 會是 黃色 如果「線上修訂清除」維護任務取消一次。 會是 紅色 如果「線上修訂清理」維護任務已連續取消三次。 在此情況下,需要手動互動 或「線上修訂清除」可能再次失敗。 如需詳細資訊,請閱讀 疑難排解 一節。 另請注意,系統重新啟動後,運行狀況檢查狀態將重置。 因此,新重新啟動的執行個體在修訂清除健康檢查中會顯示綠色狀態。 可運用外部監控工具,讓資料超出AEM正常運作時間。 請參閱 將健康狀態檢查附加至Nagios的AEM檔案,作為外部監控工具的範例. |
|
如何監視待機實例的自動清除? |
狀態、進度和統計資訊會透過JMX公開,方法是使用 您可以使用 請注意,統計資料僅自上次系統啟動後才可用。 可運用外部監控工具,讓資料超出AEM正常運作時間。 另請參閱 將健康狀態檢查附加至Nagios的AEM檔案,作為外部監控工具的範例. 日誌檔案還可用於檢查「自動清理」的狀態、進度和統計資訊。 |
|
在備用實例的自動清理期間需要監控哪些內容? |
|
如果不運行「線上修訂清除」,最糟糕的情況是什麼? | AEM執行個體將耗盡磁碟空間,導致生產中斷。 | |
在發佈執行個體上執行線上修訂清除會造成高使用者流量問題嗎? | 高使用者流量會影響壓縮階段是否能成功完成。 |
|
根據運行狀況檢查和日誌條目,聯機修訂清除未連續成功完成三次。 成功完成線上修訂清除需要什麼? | 您可以執行數個步驟來尋找並修正問題:
|
|
開啟健康檢查警報後需要執行什麼? | 請參閱前一點。 | |
如果「線上修訂清除」在排程的維護期間逾時,會發生什麼事? | 將取消線上修訂清除,並刪除剩餘內容。 它將在下次計畫維護窗口時重新啟動。 | |
原因 SegmentNotFoundException 要登入的例項 error.log 如何恢復? |
A
|
如果線上修訂清除過程中發生事件,error.log將是詳細的。 下列矩陣旨在說明最常見的訊息並提供可能的解決方案:
階段 | 記錄訊息 | 解釋 | 後續步驟 |
---|---|---|---|
估計 | TarMK GC #2:因為壓縮已暫停,所以跳過估計。 | 當通過配置在系統上禁用壓縮時,將跳過估計階段。 | 啟用「線上修訂清除」。 |
N/A | TarMK GC #2:估計中斷:${REASON}。 略過壓縮。 | 估計階段提前終止。 可能會中斷估計階段的一些事件範例:主機系統上的記憶體或磁碟空間不足。 | 這取決於特定原因。 |
壓實 | TarMK GC #2:壓縮已暫停。 | 只要壓縮階段被配置暫停,則估計階段和壓縮階段都不會被執行。 | 啟用線上修訂清除。 |
不適用 | TarMK GC #2:壓縮已取消:${REASON}。 | 壓縮階段提前終止。 可能會中斷壓縮階段的事件範例:主機系統上的記憶體或磁碟空間不足。 此外,還可以通過關閉系統或通過管理介面(如操作儀表板中的維護窗口)顯式取消壓縮來取消壓縮。 | 這取決於特定原因。 |
不適用 | TarMK GC #2:壓縮在5次循環後32.902分鐘(1974140毫秒)內失敗。 | 此訊息不表示有無法復原的錯誤,但只有壓縮在經過特定嘗試後才會終止。 此外,請閱讀 後面的段落。 | 請閱讀以下內容 Oak檔案,以及執行線上修訂清除區段的最後一個問題。 |
清理 | TarMK GC #2:清理中斷。 | 已通過關閉儲存庫取消清理。 預期不會影響一致性。 此外,磁碟空間很可能不會完全回收。 將在下一個修訂清除週期中回收。 | 調查為何已關閉儲存庫,並在以後嘗試避免在維護窗口期間關閉儲存庫。 |
您需使用不同版本的Oak執行工具,端視您與AEM安裝搭配使用的Oak版本而定。 使用此工具之前,請先檢查下方的版本需求清單:
適用於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,可手動執行以壓縮存放庫。 此程式稱為離線修訂清除,因為必須關閉存放庫才能正確執行工具。 請務必根據您的維護時段規劃清理。
有關如何提高清理過程效能的提示,請參閱 提高離線修訂清除的效能.
您也可以在進行維護前清除舊查核點(以下程式中的步驟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. 要保留直到壓縮當前映射為止的壓縮映射條目數。 預設為1000000。 如果有足夠的堆記憶體可用,則應將此值增加到更高的數字,以加快吞吐量。 此參數已在Oak 1.6版中移除,且無效。
-Dcompaction-progress-log. 要記錄的壓縮節點數。 預設值為150000,這表示在操作期間將記錄150000個壓縮的節點。 請結合下列說明的下一個參數使用。
-Dtar.PersistCompactionMap。 將此參數設為true ,以使用磁碟空間而非堆記憶體來保存壓縮映射。 需要oak-run工具 版本1.4 更高。 欲知更多詳情,請參閱 離線修訂清除常見問題 區段。 此參數已在Oak 1.6版中移除,且無效。
— 力。 強制壓縮並忽略非相符區段存放區版本。
使用 --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版中移除。 |