首先需要確認內存溢出的具體情況,通過工具定位問題根源。
free -m
查看系統整體內存使用(總內存、已用、剩余);top
或htop
找出占用內存高的進程(重點關注WebLogic進程);vmstat 1
監控內存、交換分區(Swap)的使用趨勢。http://服務器IP:7001/console
)進入“服務器→監控→性能”模塊,查看堆內存使用率、線程池狀態、數據庫連接池使用情況;或使用setDomainEnv.sh
中的-Dcom.sun.management.jmxremote
開啟JMX,配合JConsole、VisualVM等工具遠程監控。/home/weblogic/user_projects/domains/base_domain/servers/AdminServer/logs/
目錄下的server.log
、console.log
),搜索“OutOfMemoryError”關鍵詞,確認溢出類型(如堆溢出、元空間溢出)。根據應用需求合理配置堆內存和元空間,避免因內存不足導致溢出。
bin/setDomainEnv.sh
文件,在JAVA_OPTIONS
中添加或調整以下參數:
-Xms
:初始堆內存(如-Xms1g
,建議與-Xmx
一致,避免頻繁擴容);-Xmx
:最大堆內存(如-Xmx4g
,不超過物理內存的70%,避免占用過多系統內存);-XX:MaxMetaspaceSize=512m
(默認無限制,易導致元空間溢出);-XX:+UseG1GC -XX:MaxGCPauseMillis=200
(目標最大GC暫停時間200ms)。./stopWebLogic.sh && ./startWebLogic.sh
)使配置生效。內存泄漏是導致內存溢出的常見原因,需通過工具定位泄漏點并修復。
setDomainEnv.sh
中添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof
,當發生內存溢出時自動生成堆快照文件。.hprof
文件,查看“支配樹”“泄漏嫌疑對象”,定位持有大量對象的類或方法(如未關閉的數據庫連接、緩存未清理的對象)。try-with-resources
語句);static Map
);調整WebLogic自身配置,減少內存消耗。
setDomainEnv.sh
,調整線程池大?。ǜ鶕l請求量設置):-Dweblogic.threadpool.MinThreads=50
(最小線程數)、-Dweblogic.threadpool.MaxThreads=500
(最大線程數),避免線程過多導致內存占用過高。初始容量
(Initial Capacity):設置為預期并發連接數的80%;最大容量
(Max Capacity):不超過數據庫允許的最大連接數;超時設置
(Inactive Connection Timeout Seconds):設置為30-60秒,及時回收閑置連接。通過調整操作系統設置,提升內存使用效率。
apt-get clean
清理APT緩存(刪除已下載的軟件包);使用sync && echo 3 > /proc/sys/vm/drop_caches
清理PageCache、Slab緩存(不影響正在運行的程序)。/etc/sysctl.conf
,優化內存管理:
vm.swappiness=10
(降低內核將內存交換到Swap的傾向,10表示僅在內存不足時使用Swap);vm.dirty_ratio=20
(臟頁占內存的比例達到20%時觸發寫回磁盤);sysctl -p
使參數生效。free -m
顯示剩余內存<10%),建議升級服務器物理內存(DDR4/DDR5 ECC內存更穩定)。建立長效監控機制,提前預警內存溢出風險。
通過以上步驟,可有效解決Debian系統上WebLogic的內存溢出問題。需注意的是,優化過程應遵循“先監控、后調整”的原則,在測試環境中驗證配置效果后再應用于生產環境。