PowerFlex Manager 3.8: 記憶體不足的 Java 堆積錯誤導致效能不佳
Summary: Java 堆積記憶體耗盡會導致 PFxM UI 效能不佳,以及針對各種工作 (例如資源清查、部署新服務或新增現有服務) 隨機發生意外故障。
Symptoms
PFxM UI 效能不佳,而且可能很慢,而且在 UI 內拉出不同區段時可能會很慢。各種任務(如資源清單、部署新服務或添加現有服務)可能會意外失敗。
可使用 asmui 和 asmManager 記錄顯示 Out-OfMemory 錯誤:
2024-06-01 01:17:24 [http-nio-9030-exec-4] (DeviceController.java:626) [ERROR] getDeviceList() - Exception from service call
java.lang.OutOfMemoryError: Java heap space
2024-06-01 01:17:24 [http-nio-9030-exec-4] (BaseController.java:304) [ERROR] Found generic exception in Controller
java.lang.OutOfMemoryError: Java heap space
2024-06-01 01:17:24 [http-nio-9030-exec-9] (DeviceController.java:626) [ERROR] getDeviceList() - Exception from service call
java.lang.OutOfMemoryError: Java heap space
2024-06-01 01:17:24 [http-nio-9030-exec-9] (BaseController.java:304) [ERROR] Found generic exception in Controller
java.lang.OutOfMemoryError: Java heap space
2024-06-01 01:17:26 [http-nio-9030-exec-6] (DeviceController.java:626) [ERROR] getDeviceList() - Exception from service call
java.lang.OutOfMemoryError: Java heap space
2024-06-01 01:17:26 [http-nio-9030-exec-6] (BaseController.java:304) [ERROR] Found generic exception in Controller
java.lang.OutOfMemoryError: Java heap space
...
2024-07-10 00:40:50 [http-nio-9030-exec-11] (RestTemplateResponseErrorHandler.java:47) [ERROR] REST Error: {
"detailMessage" : "Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space",
"cause" : {
"cause" : {
"cause" : null,
"stackTrace" : [ ],
"message" : "Java heap space",
"localizedMessage" : "Java heap space",
"suppressed" : [ ]
...
"stackTrace" : [ ],
"suppressedExceptions" : [ ],
"status" : 500,
"timestamp" : "2024-07-10T04:40:50.986+00:00",
"error" : "Internal Server Error",
"path" : "/AsmManager/job/",
"messages" : [ {
"messageBundle" : null,
"messageCode" : null,
"severity" : null,
"category" : null,
"displayMessage" : "Runtime error",
"responseAction" : null,
"detailedMessage" : "Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space",
"agentId" : null,
"correlationId" : null,
"timeStamp" : "2024-07-10T04:40:50.987+00:00",
"sequenceNumber" : 0
} ]
}
2024-07-10 00:40:50 [http-nio-9030-exec-11] (JobsController.java:83) [ERROR] getJobs() - Exception from service call
com.dell.asm.rest.common.exception.LocalizedWebApplicationException: HTTP 500 Internal Server Error
at com.dell.pfxm.springboot.helpers.error.RestTemplateResponseErrorHandler.handleError(RestTemplateResponseErrorHandler.java:64) ~[RestCommon-0.7.0-SNAPSHOT.jar!/:?]
...
影響
Java 堆積記憶體耗盡會導致 PFxM UI 效能不佳,以及各種工作的隨機意外故障。
Cause
asmui 和 asmManager 元件的預設 Java 堆記憶體範圍分別為 128M-512M 和 512M-6144M。在較大的環境中,此記憶體範圍可能不足以讓各種進程正確運行,從而導致堆記憶體耗盡。
在 PFxM 中具有大量物件的環境(例如,100+ 資源、3+ 個節點的 3+ 服務、10+ 個服務總數)將受益於更大的 Java 堆記憶體池。
Resolution
可以增加 asumui 和 asmManager 元件的 Java 堆大小。過去,這通常被視為「大規模修補程式」,因為必須將修補程式應用於當前的 PFxM 實例,並且不會在 PFxM 升級中保留。
不再需要修補程式,因為此更新會套用至在 PFxM 升級期間持續存在的組態檔案。
注意:在更新堆值之前,PFxM VM 必須設定至少 20 個 vCPU (10 個核心/2 個插槽) 和 56 GB 記憶體。
此程序需要重新開機 PFxM VM,並據此進行規劃。
1.從 PFxM CLI 備份目前的 asmui 和 asmManager Java 組態檔案:
sudo cp /opt/Dell/ASM/conf/asmui-jvm-props.conf asmui-jvm-props.conf.bak sudo cp /opt/Dell/ASM/conf/asmManager-jvm-props.conf asmManager-jvm-props.conf.bak
2.在中心拍攝 PFxM VM 的快照。
3.將 asmui 堆積上限範圍增加到 2048M:
echo '-Xloggc:/opt/Dell/ASM/logs/gc_asmui.log -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="/opt/Dell/ASM/logs/" -Xms128m -Xmx2048m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Dhttp.nonProxyHosts="localhost.localdomain|localhost|127.0.0.1" -Djava.io.tmpdir=/opt/Dell/ASM/temp -Dspring.profiles.active=main' > /opt/Dell/ASM/conf/asmui-jvm-props.conf
4.將 asmManager 堆積上限範圍提高到 18432M:
echo '-Xloggc:/opt/Dell/ASM/logs/gc_asmManager.log -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="/opt/Dell/ASM/logs/" -Xms512m -Xmx18432m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Dhttp.nonProxyHosts="localhost.localdomain|localhost|127.0.0.1" -Djava.io.tmpdir=/opt/Dell/ASM/temp -Dspring.profiles.active=main' > /opt/Dell/ASM/conf/asmManager-jvm-props.conf
5.重新啟動 PFxM VM。
6.確認已套用組態變更:
cat /opt/Dell/ASM/conf/asmui-jvm-props.conf | grep -E 'Xms|Xmx' cat /opt/Dell/ASM/conf/asmManager-jvm-props.conf | grep -E 'Xms|Xmx'
7.實作變更並解決問題後,請在中心刪除 PFxM VM 快照。
受影響的
版本 3.8.6 及更新版本