目標

本文將說明最常見的嚴重 AEM 問題,以及如何加以分析。

AEM 站點效能問題

效能問題的症狀

  1. 頁面載入緩慢
  2. 頁面建立或編輯緩慢
  3. AEM 回應時間緩慢
  4. AEM 對於部分請求沒有回應
  5. AEM 的 request.log 顯示回應時間緩慢

效能問題起因

  1. 執行緒爭用 – 長時間執行的請求,例如搜尋緩慢、頻繁寫入的背景工作,以及站點內容的整體分支移動等
  2. 高 CPU 使用率
  3. 耗時的請求,例如耗時的搜尋,或效率低落的應用程式碼、元件等。
  4. 缺乏適當維護
  5. 派送程式快取不足
  6. 缺乏 CDN
  7. 缺乏瀏覽器快取
  8. 頁面載入過多指令碼,且皆在頁面頂端載入
  9. CSS 載入整個頁面,而非在 HTML 頁首
  10. 伺服器大小調整不足,或架構不正確
  11. 記憶體問題 (如下所示)

如何分析效能問題

1. 擷取一系列的執行緒傾印加以分析

2. 檢查作業系統層級,瞭解 AEM Java 處理程序是否造成高 CPU 使用率

    Linux: 使用 top 命令檢查 CPU 使用率

    Windows: 使用 Windows 工作管理員

    如果 AEM 造成高 CPU 使用率,請執行內建剖析工具並等待數分鐘,接著分析結果。

3. 針對任何緩慢請求的 request.log 檔案進行分析

4. 檢閱您的系統維護程序,並確認您對 AEM 進行適當維護,其中包括下列項目:

  • 修訂清除 (僅限 MongoMK 與資料庫 DocumentNodeStore) – 每日或更頻繁
  • 離線 Tar 壓縮 (僅限 TarMK) – 每兩週
  • 資料存放區記憶體回收 (僅限擁有 FileDataStore 或 S3 DataStore 的系統) – 每週
  • 工作流程清除 – 每週
  • 版本清除 – 每週
  • 稽核記錄清除 – 每週

5. 檢閱以 AEM 派送程式層級執行的快取策略。 最佳著手方式為瞭解派送程式快取檔案及讓快取檔案失效的時間與方式

6. 檢查您是否使用 CDN

7. 瞭解您是否正運用瀏覽器快取──檢查是否有 Cache-Control 標頭

8. 使用用戶端站點分析工具,例如 Google Chrome 瀏覽器「開發人員工具」面板中的「稽核」功能。 這些工具會針對用戶端效能改善方面提供建議。

常見效能問題的解決方法

AEM 資產效能問題

資產效能問題的症狀

  • 檔案上傳至 /assets.html 或 /damadmin 使用者介面的速度緩慢
  • 產生縮圖的時間太長
  • 資產作業 (例如移動、刪除、編輯及中繼資料更新) 花的時間太長

資產效能問題起因

  • 缺乏適當維護
  • 未套用最新的修正套件
  • 未套用最佳化
  • 使用者負載的伺服器大小調整不足

如何分析資產效能問題

常見資產效能問題的解決方法

記憶體問題

記憶體問題的症狀

  • AEM 隨機性當機,且記錄中出現 OutOfMemoryError
  • AEM 速度逐漸變慢,最後發生當機
  • AEM 沒有回應

診斷記憶體問題

  • 搜尋 OutOfMemoryError 的記錄檔,若您找到任何符合的檔案,則表示記憶體出現問題。
  • 檢閱 http://aem-host:port/system/console/memoryusage 畫面
    如果「Old Generation」(JDK 7 及更早版本) 或「Tenured Generation」(JDK 8 或更新版本) 的使用率過高,這可能是堆積記憶體使用率出現問題的象徵。 按一下「執行記憶體回收器」,以請求 JVM 執行完整堆積記憶體回收。 如果高堆積使用率在請求 GC (記憶體回收) 後仍居高不下,則表示可能出現問題。 在使用 Oak Tar 儲存空間的 AEM 例項中,如果年長 (tenured) 區域使用量大於 3GB,則表示可能出現問題。 如果使用 Mongo 儲存空間的系統出現高堆積使用率,則問題可能出自於記憶體內部快取設定。
  • 收集執行緒傾印與頂端的輸出,並進行執行緒分析。 檢查造成高 CPU 使用率的執行緒是否為原生 JVM Garbage Collection 執行緒。 如果使用大部分 CPU 時間的執行緒為「VM Thread」或任何記憶體回收執行緒,則表示記憶體可能出現問題。

記憶體問題起因

  • Java 應用程式記憶體流失
  • 由於自訂程式碼中結束的使用方式不正確,因此 Java Finalizer 發生堆疊
  • 最大堆積設定不足

如何分析您的記憶體問題起因

如需有關如何擷取堆積傾印的詳細資訊,請參閱本文

找出記憶體問題起因的最佳方式為分析堆積傾印。 

擷取堆積傾印檔案後,接著在 Eclipse MATIBM Memory Analyzer 工具中開啟。 在 Eclipse MAT 中,執行 Leak Suspects 報告並開啟「執行緒詳細資訊」檢視,以瞭解造成記憶體問題的潛在原因。

常見記憶體問題的解決方法

  • 如果您發現長時間出現記憶體回收暫停的情形,請最佳化應用程式碼以減少記憶體使用量。 大多數的記憶體回收問題可透過最佳化應用程式或調整 JVM 有效解決。
  • 如果您已最佳化應用程式,但仍遇到長時間 GC 暫停問題,請著手調整 JVM

AEM 索引問題

索引問題的症狀

下列為發生 AEM/Oak 索引問題的象徵:

  • 搜尋結果過時超過 10 分鐘
  • 搜尋結果遺失
  • 透過站點使用者介面、查詢生產器搜尋或 JCR 查詢執行搜尋期間,使用者介面或記錄中傳回錯誤訊息
診斷索引問題
  • 若要判斷非同步處理索引為緩慢或失敗,請執行下列步驟:

1. 在 AEM 例項中開啟以下 URL,以檢視有關「非同步處理索引子」的統計資料

http://aemhost:port/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3Dasync%2Ctype%3DIndexStats

http://aemhost:port/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3Dfulltext-async%2Ctype%3DIndexStats  –  此 URL 僅適用於 AEM 6.2 及更新版本

2. 在上述各頁面中,檢查以下欄位:

FailingSince – 此欄位會指出索引首次開始失敗的時間。

LastError – 此欄位會顯示索引失敗起因的堆疊追蹤。 如果此欄位空白,則表示索引沒有失敗。

LastErrorTime – 此欄位會指出上次索引擲回錯誤訊息的時間。

LastIndexedTime – 如果此欄位的日期與時間晚於 5 分鐘,則表示索引執行過慢。

索引問題的起因

  • 未適當維護或無法執行維護,例如「修訂記憶體回收」、「工作流程清除」、「稽核清除」及「版本清除」等。
  • Tar 儲存空間的區段損毀或遺失
  • 叢集環境中的修訂損毀 (DocumentNodeStore – Mongo 或資料庫)
  • 叢集環境中的叢集拓撲問題

如何分析索引問題的起因

  • 如需有關分析與修正索引問題的詳細資訊,請參閱本文

此産品由 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 授權  Creative Commons 條款未涵蓋 Twitter™ 與 Facebook 文章。

法律說明   |   線上隱私權政策