昨天給客戶做巡檢,又將整個WebLogic Server的優化過程走了一遍,記錄下來給大家參考。
1.JVM優化
查看
$ps –ef | grep java /opt/java1.5/bin/java -server -Xms256m -Xmx512m -XX:PermSize=16M -XX:NewSize=128m -XX:MaxPermSize=256m … |
參數設置原則
- 保持簡單性
- 提供基本參數(-X 參數)-Xms、-Xmx、-Xmn
- 選擇一個 GC/性能優先級,權衡吞吐量與暫停時間
- 其余參數大多使用默認值,(讓人體工程機制計算正確值,僅當默認值無效時調優)
- 年輕代的大小將決定
- 次要 GC 的頻率
- 次要 GC 收回的對象數量
- 年老代大小
- 應達到應用程序穩定狀態的 實時數據大小
- 嘗試最大限度減小主要 GC 的頻率
- JVM 內存占用不應超過物理內存
- 最大達到 RAM 的 80-90%(為操作系統留出空間)
- 經驗法則:應盡量增加年輕代收回的對象。盡量增加完整 GC 頻繁
- Set –Xmx = –Xms
- 防止堆大小 (Full GC) 從 Xms 增大到 Xmx
- 性能更優
- 並非總是生產可用性的最佳選擇(OOME 更合適使用內存交換)
- 持久代大小
- -XX:PermSize = -XX:MaxPermSize
- 持久代占用空間大小難以預測
- 設置足夠高以防止 PermGen OOME
- 將 -XX:NewSize 設置為 -XX:MaxNewSize
- 優先使用 –Xmn
設置
一般來說在64位系統中開到4G-8G,如果有多租戶的規划,可以開到更大,修改setDomainEnv.sh
也可以根據受管Server的名字設置不同的JVM,具體設置在USER_MEM_ARGS參數前
############# change jvm ######################### if [ "${SERVER_NAME}" = "" ] ; then SERVER_NAME="AdminServer" export SERVER_NAME fi if [ "${SERVER_NAME}" = "AdminServer" ] ; then USER_MEM_ARGS="-Xms512m -Xmx1024m -XX:MaxPermSize=512m" else USER_MEM_ARGS="-Xms4g -Xmx4g -XX:MaxPermSize=1024m" fi
############# e n d ######################### |
JVM GC文件輸出設置
如果需要分析JVM GC日志,需要在啟動時加入參數
Sun:-verbose:gc -XX:+PrintGCDetails -Xloggc:<filename> IBM:-Xverbosegc:file=filename 或 -Xverbosegclog:filename HP :-Xverbosegc=filename Oracle JRockit:-Xverbose:memory -XverboseLog:filename |
隨后可以通過GCViewer進行脫機的日志查看。
2.關於線程
WebLogic Server在9以后引入了work manager機制,因此weblogic會自動對線程的數目進行優化,開發模式下初始線程數為15,生產模式下初始線程數為25
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=1000"
export JAVA_OPTIONS |
一般線程數建議設置成100-500之間,線程太多容易引起進程內部的線程切換.
3.Accept BackLog
服務器->配置->優化->接受積壓:
4.Muxer優化
Muxer定位:在前端接入請求,然后轉交執行隊列
- Java Muxer
- Native Muxer
- Non-Blocking IO Muxer
5.JDBC優化
- 理想情況下,設置為最小值 = 最大值,以避免按需創建連接
- 如果 DB 連接數受限,請將最小值設置為處理普通負載所需的連接數,將最大值設置為處理峰值負載所需的連接數,並啟用池收縮
- Active Connections High Count
- Waiting on Connection High Count
- Wait Seconds High Count
緩存主要設置語句的條數,缺省為10,建議調大,設置成300
- 如果某數據源的數據庫不可用,那么此選項設置為默認值 0 時 WLS 將無法啟動!
- 設置為非零值可讓服務器順利啟動並定期重試創建連接池
- 與 Test Connections On Reserve 共同發揮作用
- 可顯著減少連接測試查詢
- 僅有利於涉及多種資源的 XA 事務
- Last Logging Resource(非 XA)必須是數據庫