昨天給客戶作巡檢,又將整個WebLogic Server的優化過程走了一遍,記錄下來給你們參考。前端
1.JVM優化java
查看web
$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 的頻率
- JVM 內存佔用不該超過物理內存
- 最大達到 RAM 的 80-90%(爲操做系統留出空間)
- 經驗法則:應儘可能增長年輕代收回的對象。儘可能增長完整 GC 頻繁
- Set –Xmx = –Xms
- 防止堆大小 (Full GC) 從 Xms 增大到 Xmx
- 性能更優
- 並不是老是生產可用性的最佳選擇(OOME 更合適使用內存交換)
- 持久代大小
- -XX:PermSize = -XX:MaxPermSize
- 持久代佔用空間大小難以預測
- 設置足夠高以防止 PermGen OOME
- 將 -XX:NewSize 設置爲 -XX:MaxNewSize
設置dom
通常來講在64位系統中開到4G-8G,若是有多租戶的規劃,能夠開到更大,修改setDomainEnv.shjvm
也能夠根據受管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
目前WebLogic Server採用自優化的策略來進行線程的自動擴展,通常情況下不須要對線程進行專門的優化,若是在壓力測試環境中有必要,能夠設置最小線程數和最多線程數,具體設置方法以下:
修改weblogic\user_projects\domains\base_domain\bin下的setDomainEnv.sh中在JAVA_OPTIONS中添加以下:
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=1000" export JAVA_OPTIONS |
通常線程數建議設置成100-500之間,線程太多容易引發進程內部的線程切換.
3.Accept BackLog
WebLogic 使用Accept Backlog (TCP queue)參數規定WebLogic向系統請求的queue的大小, Accept Backlog屬性決定了在 waiting queue(listening queue)中最多能夠有多少TCP鏈接等待處理,預設值爲300
若是在許多client鏈接被拒絕,而在服務器端沒有錯誤顯示,說明該值設得太低
若是鏈接時收到了」connection refused」消息,能夠適當增大weblogic.system.acceptBacklog的值,每次增長25% ,配置以下:
服務器->配置->優化->接受積壓:
4.Muxer優化
Muxer定位:在前端接入請求,而後轉交執行隊列
WebLogic Server採用3種Muxer機制
- Java Muxer
- Native Muxer
- Non-Blocking IO Muxer
始終驗證 WebLogic 正在使用 NativeIO。如下消息指示其正在使用中
<Aug 7, 2012 8:32:10 AM CDT> <Info> <Socket> <BEA-000446> <Native IO Enabled.>
從 32 位 JVM 切換至 64 位 JVM 時需格外注意。32 位 WebLogic Server 下載文件不含套接字合成器所需的 64 位本地庫。
若是沒法使用NativeIO(或者不溝取),Java Muxer設置
缺省33%,最高50%,這都是指的佔用線程的比例關係,
也能夠設置合成器線程數量限制: -Dweblogic.SocketReaders=4
傳統方式下只有一個Muxer,Non-Blocking IO Muxer是在Exalogic上採用,缺省會啓動3個Muxer.
5.JDBC優化
建立 DB 鏈接是一個很是耗時的過程
- 理想狀況下,設置爲最小值 = 最大值,以免按需建立鏈接
- 若是 DB 鏈接數受限,請將最小值設置爲處理普通負載所需的鏈接數,將最大值設置爲處理峯值負載所需的鏈接數,並啓用池收縮
在控制檯中監視數據源統計數據
- Active Connections High Count
- Waiting on Connection High Count
- Wait Seconds High Count
緩存主要設置語句的條數,缺省爲10,建議調大,設置成300
Connection Creation Retry Seconds(默認值 = 0)
- 若是某數據源的數據庫不可用,那麼此選項設置爲默認值 0 時 WLS 將沒法啓動!
- 設置爲非零值可以讓服務器順利啓動並按期重試建立鏈接池
Seconds to Trust Idle Pool Connection(默認值 = 10 秒)
- 與 Test Connections On Reserve 共同發揮做用
- 可顯著減小鏈接測試查詢
請考慮 LLR for JTA 事務
- 僅有利於涉及多種資源的 XA 事務
- Last Logging Resource(非 XA)必須是數據庫