本文整理自項(xiàng)目一線工程經(jīng)驗(yàn),內(nèi)容來源于《WebLogic 性能調(diào)優(yōu)最佳實(shí)踐文檔》,為 WebLogic 在實(shí)際部署與運(yùn)行過程中常見性能問題的標(biāo)準(zhǔn)化處理與優(yōu)化方案匯總。
文檔內(nèi)容僅做結(jié)構(gòu)與表達(dá)形式調(diào)整,技術(shù)內(nèi)容與原文完全一致。
一、文檔背景說明
在 WebLogic 項(xiàng)目實(shí)施過程中,經(jīng)常會遇到如下問題:
? 啟動時報(bào) OutOfMemoryError
? 并發(fā)稍高就出現(xiàn)連接拒絕
? 數(shù)據(jù)源連接池頻繁耗盡
? CPU、線程、連接數(shù)利用率異常
這些問題大多并非業(yè)務(wù)代碼導(dǎo)致,而是 WebLogic 默認(rèn)配置偏保守。
因此有必要在項(xiàng)目部署或上線前,對 WebLogic 進(jìn)行一次系統(tǒng)性的性能調(diào)優(yōu)。
二、WebLogic 內(nèi)存配置
在部署或啟動項(xiàng)目時報(bào)錯:
java.lang.OutOfMemoryError: PermGen space
由于 WebLogic 的配置問題,我們的測試出現(xiàn)了失敗情況。
原因是為 WebLogic 分配的內(nèi)存太少了。
配置調(diào)整方式
通過修改 setDomainEnv.sh 文件來增加內(nèi)存分配。
文件路徑:
/weblogic/Middleware/user_projects/domains/base_domain/bin/setDomainEnv.sh
修改以下參數(shù)(當(dāng)前操作系統(tǒng),選擇修改 “SUN”):
根據(jù)操作系統(tǒng)內(nèi)存,一般占用操作系統(tǒng)的 50%–60%,建議最大不要超過 8G
原默認(rèn)配置如下:
if [ "${JAVA_VENDOR}" = "Sun" ] ; then
WLS_MEM_ARGS_64BIT="-Xms256m -Xmx512m" //64位
export WLS_MEM_ARGS_64BIT
WLS_MEM_ARGS_32BIT="-Xms256m -Xmx512m" //32位
export WLS_MEM_ARGS_32BIT
fi
調(diào)整后配置如下:
if [ "${JAVA_VENDOR}" = "Sun" ] ; then
WLS_MEM_ARGS_64BIT="-Xms4096m -Xmx4096m" //64位
export WLS_MEM_ARGS_64BIT
WLS_MEM_ARGS_32BIT="-Xms4096m -Xmx4096m" //32位
export WLS_MEM_ARGS_32BIT
fi
三、修改默認(rèn)線程數(shù)
WebLogic 默認(rèn)連接線程數(shù)較少,需要進(jìn)行調(diào)整。
默認(rèn) 50,按 CPU 數(shù)來分配
分配數(shù)量建議:CPU 數(shù) × 50
添加以下參數(shù):
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=500"
export JAVA_OPTIONS
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MaxPoolSize=3000"
export JAVA_OPTIONS
四、優(yōu)化 Java 參數(shù)
修改 WebLogic 使用的 JDK 隨機(jī)數(shù)配置,避免啟動和訪問過程中的阻塞問題。
cd /weblogic/jdk1.6.0_45/jre/lib/security/
vi java.security
將:
securerandom.source=file:/dev/urandom
修改為:
securerandom.source=file:/dev/./urandom
五、操作系統(tǒng)參數(shù)優(yōu)化
增加用戶進(jìn)程數(shù)以及能打開的文件數(shù)。
修改系統(tǒng)配置文件:
vi /etc/security/limits.conf
配置如下:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
六、應(yīng)用服務(wù)器優(yōu)化(控制臺啟動)
控制臺啟動需要配置,后臺啟動不需要配置。
實(shí)際大小配置參考前面內(nèi)存配置與線程配置部分。
-Xms1024m -Xmx1024m
-Dweblogic.threadpool.MinPoolSize=800
-Dweblogic.threadpool.MaxPoolSize=1200

七、優(yōu)化連接緩存(Accept Backlog)
config.xml 文件中的元素接受緩存數(shù)(AcceptBacklog)屬性,用來設(shè)定請求 WebLogic 實(shí)例的連接數(shù)。
在拒絕額外請求之前,能接受設(shè)定的緩存數(shù)。
AcceptBacklog 屬性指定:
? TCP 連接在等待隊(duì)列中的緩存數(shù)量
? 該隊(duì)列存放 TCP 堆棧已接收但應(yīng)用程序尚未處理的連接請求
默認(rèn)值:50
最大值:由操作系統(tǒng)決定。
控制臺調(diào)整步驟
1. 啟動 WebLogic,訪問控制臺
2. 展開左邊面板 Servers 節(jié)點(diǎn)
3. 點(diǎn)擊需要配置的服務(wù)器實(shí)例

4. 選擇 Configuration → Tuning
根據(jù)需要修改默認(rèn)的接受緩存數(shù)(Accept Backlog),點(diǎn)擊 Apply 保存。

調(diào)整經(jīng)驗(yàn)說明
? 如果運(yùn)行期間客戶端連接得不到響應(yīng)或被拒絕
? 且服務(wù)器端無錯誤日志
說明接受緩存數(shù)可能過小。
如果訪問 WebLogic 時收到:
connection refused
建議:
? 先增加 25%
? 若仍存在問題,再繼續(xù)增加 25%
? 直到不再出現(xiàn)該提示
八、JDBC 調(diào)優(yōu)
調(diào)整 JDBC 連接池容量
在生產(chǎn)系統(tǒng)中,InitialCapacity 的值應(yīng)設(shè)置為與 MaxCapacity 相同。
默認(rèn)值較小,可能導(dǎo)致連接池溢出。
如果 InitialCapacity 小于 MaxCapacity:
? 高負(fù)載時需要動態(tài)創(chuàng)建數(shù)據(jù)庫連接
? 增加系統(tǒng)開銷
? 延遲業(yè)務(wù)請求處理
調(diào)整步驟
1. 登錄 WebLogic 控制臺

2. 選擇 服務(wù) → 數(shù)據(jù)源 → 需要優(yōu)化的數(shù)據(jù)源
3. 選擇 連接池,點(diǎn)擊下方 高級

4. 點(diǎn)擊 鎖定并編輯
5. 調(diào)整 初始容量(InitialCapacity)
?
九、使用 WebLogic 自有的 IO 性能包(Native IO)
本地 Socket 讀的多線程有自己的執(zhí)行隊(duì)列,不需要借用默認(rèn)執(zhí)行線程。
這樣可以讓默認(rèn)執(zhí)行線程更專注于處理應(yīng)用邏輯。
如果 Enable Native IO 復(fù)選框未選中,需要啟用。
驗(yàn)證與開啟步驟
1. 啟動管理服務(wù)器
2. 訪問管理控制臺
3. 展開左邊面板 Servers
4. 點(diǎn)擊目標(biāo)服務(wù)器實(shí)例
5. 選擇 Configuration → Tuning
6. 勾選 Enable Native IO
7. 點(diǎn)擊保存
8. 重啟服務(wù)器

十、結(jié)語
以上內(nèi)容為 WebLogic 在實(shí)際項(xiàng)目中總結(jié)出的性能調(diào)優(yōu)實(shí)踐方案,
覆蓋了:
? JVM 內(nèi)存
? 線程池
? 操作系統(tǒng)
? 連接緩存
? JDBC 連接池
? IO 性能優(yōu)化
全部內(nèi)容均來自原始工程文檔,僅進(jìn)行了博客化整理,未刪減任何技術(shù)細(xì)節(jié)。




