WebLogic Server 關鍵優化指標


昨天給客戶做巡檢,又將整個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

目前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)必須是數據庫
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM