1. 監控系統資源使用情況
首先通過工具定位資源占用高的根源。使用top
命令實時查看CPU、內存占用率(按M
鍵按內存排序,P
鍵按CPU排序),識別占用高的進程;vmstat 1 5
監控系統整體狀態(重點關注r
列——運行隊列長度、b
列——阻塞進程數、free
列——空閑內存、si/so
列——磁盤交換情況);iostat -x 1
分析磁盤I/O(關注%util
——磁盤利用率、await
——平均等待時間,若%util
接近100%說明磁盤瓶頸);netstat -antp
查看網絡連接狀態(統計ESTABLISHED
連接數,判斷是否因連接數過多導致資源占用高)。
2. 優化操作系統配置
調整內核參數提升系統資源利用率。編輯/etc/sysctl.conf
文件,添加以下關鍵參數:
net.ipv4.tcp_tw_reuse = 1
(允許重用TIME_WAIT狀態的連接,減少TCP連接開銷);net.ipv4.tcp_fin_timeout = 30
(縮短TIME_WAIT狀態的超時時間,默認60秒);vm.swappiness = 10
(降低交換空間使用傾向,避免內存不足時頻繁換頁);net.core.somaxconn = 8192
(增加TCP連接隊列長度,避免連接被拒絕)。sysctl -p
使配置生效。同時,調整文件描述符限制(避免并發連接過多導致無法創建新連接),編輯/etc/security/limits.conf
添加:* soft nofile 65535
(普通用戶最大打開文件數軟限制)、* hard nofile 65535
(硬限制);編輯/etc/pam.d/login
添加session required pam_limits.so
,使限制生效。3. 調整WebLogic配置
通過調整JVM內存分配和垃圾回收策略減少內存占用。編輯setDomainEnv.sh
文件(位于DOMAIN_HOME/bin
目錄),修改JAVA_OPTIONS
參數:
-Xms
)和最大堆內存(-Xmx
)為相同值(如-Xms4g -Xmx4g
),避免堆內存動態擴展帶來的性能損耗;-XX:PermSize=256m -XX:MaxPermSize=512m
,Java 8以后用-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
);-XX:+UseG1GC
),適合大內存應用,能有效減少Full GC時間。export JAVA_OPTIONS="-Xms4g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
。http://ip:7001/console
),導航至“環境→服務器→服務器名稱→配置→線程池”,調整“最大線程數”(默認10個,可根據CPU核心數調整,如8核服務器設置為2*CPU核心數+1=17
)和“最小線程數”(設置為最大線程數的1/4~1/2
,如8個),避免線程數過少導致請求排隊或過多導致CPU競爭。10
)、“最大容量”(如100
,根據數據庫承受能力設置)、“容量增量”(如5
,避免頻繁創建連接),并設置“連接超時時間”(如30s
,及時釋放閑置連接)。4. 排查內存泄漏
若存在java.lang.OutOfMemoryError
錯誤,需通過以下步驟排查:
JAVA_OPTIONS
中添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof
,當內存溢出時自動生成堆轉儲文件;或使用jmap
命令手動生成(jmap -dump:live,format=b,file=dump.hprof <pid>
,<pid>
為WebLogic進程ID)。dump.hprof
,查看“支配樹”“泄漏嫌疑”等報告,找出占用內存最多的對象(如緩存未清理、靜態集合類無限增長)。5. 優化應用程序性能
SELECT *
)、使用連接池復用數據庫連接、引入緩存(如Redis)緩存熱點數據(如商品信息、用戶會話),減少對數據庫的直接訪問。StringBuilder
代替+
)、減少不必要的對象克隆、使用對象池復用昂貴的對象(如數據庫連接、線程)。DEBUG
調整為INFO
或WARN
,避免過多的日志輸出占用磁盤I/O和CPU資源(如log4j.logger.com.example=INFO
)。6. 硬件升級
若以上優化仍無法滿足需求,考慮升級硬件: