2016-08-11 60 views
-1

以下是我們用於AEM應用程序的Java配置。AEM中的數據存儲垃圾收集和java垃圾收集之間的區別

java -server -Xms4096m -Xmx4096m -XXermSize=2048m -XX:MaxPermSize=2048m -Djava.awt.headless=true -Djava.io.tmpdir=<path>/tmp -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path>/crx-quickstart/logs/heap_dump.hprof -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -Xloggc:<path>/crx-quickstart/logs/gc.log -Dcom.sun.management.config.file=<path>/management/management.properties -Dsling.run.modes=author,crx3,crx3tar -Dorg.apache.felix.http.host=<ip-address> -jar crx-quickstart/app/cq-quickstart-6.1.0-standalone-quickstart.jar start -c crx-quickstart -i launchpad -nofork -p 40601 -a <ip-address> -Dsling.properties=conf/sling.properties 

每當我們嘗試構建大壩資產備份包時,AEM服務器都會掛起,頁面暫時不可用。過了一段時間,服務器自行出現。我們注意到GC日誌的大小突然激增。不確定它們是否相關。數據存儲垃圾收集和Java垃圾收集有什麼區別?

回答

0

AEM GC

當傳統WCM資產被移除,則參照底層數據存儲記錄可以從節點層次結構被移除,但數據存儲區記錄本身保持。這個未被引用的數據存儲記錄會變成「垃圾」,不需要保留。

AEM使用存儲庫中存儲了許多內部和內務管理活動:

  1. 包內置和下載的出版複製
  2. 工作流程的有效載荷臨時創建
  3. 資產所創造
  4. 臨時文件在DAM渲染期間

當這些臨時o對象足夠大以至於需要在數據存儲中存儲,並且當對象最終不再使用時,數據存儲記錄本身仍然是「垃圾」。

例如:

說到包裝。與其他所有內容一樣,包數據存儲在存儲庫中,因此存儲在數據存儲中的數據包大於4KB。在開發項目過程中或者在維護系統的過程中,隨着時間的推移,軟件包可能會被構建和重建很多次,每次構建都會產生一個新的數據存儲記錄,使之前的構建記錄成爲孤兒。

我們下面要記住指出的是

  1. 「垃圾收集需要時間,可能會影響性能,所以應該進行相應規劃」
  2. 「清除垃圾的記錄,不影響正常性能,所以這不是性能優化「

垃圾co當過程開始時,選擇器首先記錄當前時間戳。然後使用多遍標記/掃描模式算法執行GC。

在第一階段中,垃圾收集器執行所有存儲庫內容的全面遍歷。對於每個具有對數據存儲記錄的引用的內容對象,它將文件定位到文件系統中,執行元數據更新 - 修改「最後修改」或MTIME屬性。此時此階段訪問的文件比初始基線時間戳更新。

在第二階段,垃圾回收器遍歷數據存儲的物理目錄結構,就像「find」一樣。它審查文件的「上次修改」或MTIME屬性,並提出以下決定:

  • 如果MTIME比初始基線時間戳更新,記錄被認爲是積極和文件不得刪除。
  • 如果MTIME在初始基準時間戳之前,考慮可移動垃圾。

MTIME =文件修改時間

這種方法適用於有私人數據存儲的單一節點。 共享數據存儲需要不同的GC方法。

欲瞭解更多信息,你可以找到以下的Adobe文檔。 https://docs.adobe.com/docs/en/aem/6-2/administer/operations/data-store-garbage-collection.html

JAVA垃圾收集:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html