關於JDK位數OS位數與WebLogic的問題總結

關於WebLogicNative IO1

(一)  原理簡單說明1

(二)  執行隊列和執行線程的相關配置1

(三)  套接字複用器的相關配置2

WebLogic如何更換64位JDK2

 

關於WebLogicNative IO

()  原理簡單說明 

服務器啓動,就會綁定到相應的端口,併爲一個端口分配一個線程以接受連接請求,一旦服務器接受到連接請求並建立好連接以後,監聽線程將處理權交給套接字複用器,套接字複用器進行一定的處理,並會負責選擇利用那個執行隊列並將請求置入其中。當有一個請求進入執行隊列,就會有一個空閒的執行線程從該隊列裏面取走並向調用者返回結果。 

()  執行隊列和執行線程的相關配置 

執行線程數量有一定的限制,在服務器啓動的時候,就已經形成了一個含有一定數量執行線程的池,執行線程可能跨 servlet  ejb  jdbc 等,由於執行線程僅當程序成功結束或者出現異常才能被釋放繼續處理其他請求,所以如果執行線程執行的不夠快,而請求又多的情況下,就會造成執行隊列的阻塞。 

相關的配置信息有: 

server 菜單 —  configuration  --- 〉高級配置 ---  Config Execute Queues 中的配置項如下: 

1、 Queue Length 隊列長度,執行隊列的長度 

2、 Queue Length Threshold Percent 一個百分數,當 request 的數量達到隊列長度的這個比例的時候, weblogic 會發出 overflow 的標誌信息。 

3、 Thread Count 服務器初始創建的執行線程的數量 

4、 Thread Increase 如果 weblogic 發出 overflow 的標誌信息, weblogic 會嘗試增加這個數量的執行線程,以解決處理矛盾。 

5、 Threads Maximum 最大執行線程數 

6、 Threads Minimum 最小執行線程數 

7、 Thread Priority 線程優先級 

另外 server 菜單 —  configuration  ---  tuning 子頁中還有一些相關的配置: 

1、  Stuck Thread Max Time 黏聯線程時間,超過這個時間沒有返回的執行線程,系統將認爲是黏聯線程。 

2、  Stuck Thread Timer Interval 系統檢查黏聯線程的時間間隔 

如果 weblogic 認爲某個隊列中的所有的線程全部黏聯的話, weblogic 將會增加執行線程的數量。 

注意:執行線程的數量一旦增加,目前 weblogic 不會去減少他,如果增加了一些線程以後再次出現 overflow 的警告, weblogic 會繼續增加執行線程的數量,一直到達到上限爲止。 

()  套接字複用器的相關配置 

Weblogic 帶有兩個版本的套接字複用器,純 java 版和本地接口版( jni ),一般來說在訪問量小的情況下, java 版比 jni 版性能要好一些,因爲 jni  API 調用會損失一部分性能,但是訪問量大的情況,一般都是 jni 版的性能比較好,所以儘量保證 weblogic 實用本地接口版的套接字複用器  

相關的配置參數有兩個,在 server 菜單 —  configuration  ---  tuning 子頁中的第一個和第二個配置項。 

Enable Native IO :啓用本地 IO ,勾選這個配置以後, weblogic 就會啓用本地接口版的套接字複用器 

Socket Readers :如果不選上一個選項,則這個選項可用,也就是說 java 版的套接字複用器會被啓用,並且, java 版的複用器會從執行線程中抽出這個比例的線程用於處理 socket 的請求。( java 客戶端訪問有關  

WebLogic如何更換64位JDK

 

使用32位JDK時,JVM一般設置最大設置爲1.7G,而現在服務器普遍內存都很大,當然可以通過多個server建立垂直集羣來更好的利用資源,但不妨使用64位JDK。雖然WebLogic可以直接在setDomainEnv裏指定JAVA_HOME來更改JDK,但肯定會遇到BEA-000438的錯,原因在於缺少對應64位JDK的native io libaray(位於weblogic/server/native)。一種方式是從別處拷貝一份過來,還有一種是下載wls_generic.jar形式的安裝文件,而不是已經帶有JDK的。然後下載64位JDK安裝(Jrockit下載),用java –jar wls_generic.jar來安裝就可以了。
————————————————————————————
附一個錯誤分析,和native libaray相關,但並不是由於64位的關係,而是沒有執行權限。
啓動過程中發現
<Apr 28, 2010 6:27:15 PM GMT+08:00> <Error> <Socket> <BEA-000438> <Unable to loa 
d performance pack. Using Java I/O instead. Please ensure that a native performa 
nce library is in: ‘/opt/java1.5/jre/lib/IA64N:/opt/java1.5/jre/lib/IA64N/server 
:/opt/java1.5/jre/../lib/IA64N::/opt/weblogic/bea/weblogic90/server/native/hpux1 
1/IPF64:/opt/weblogic/bea/weblogic90/server/native/hpux11/PA_RISC:/opt/weblogic/ 
bea/weblogic90/server/native/hpux11/PA_RISC/oci920_8:/usr/lib’
沒有啓動native io,導致系統性能低下(這裏要注意HP-UX裏IA64N下的是32位JDK,IA64W下的纔是64位JDK),而且java io配置的值較小,產生如下報錯
<Apr 28, 2010 6:15:03 PM GMT+08:00> <Warning> <Socket> <BEA-000402> <There are: 
5 active sockets, but the maximum number of socket reader threads allowed by the 
configuration is: 4. You may want to alter your configuration.>
在應用使用過程中從而出現
<Apr 28, 2010 6:14:10 PM GMT+08:00> <Error> <Console> <BEA-240003> <Console enco 
untered the following error javax.servlet.jsp.JspException: Broken pipe (errno:3 
2) 
         at com.bea.console.taglib.html.tree.TreeTag.print(TreeTag.java:231) 
         at com.bea.console.taglib.html.tree.TreeTag.doEndTag(TreeTag.java:192)
觀察控制檯的thread信息
Self-Tuning Thread Pool     
Active Execute Threads     Execute Thread Total Count     Execute Thread Idle Count     Queue Length     Pending User Request Count     Completed Request Count     Hogging Thread Count     Standby Thread Count     Throughput     Health 
16     58     15     6048     0     144840     4     38     4.577865205875421     OK
排隊的請求數多達6000個,導致了OutOfMemory,在JAVA堆還很空的情況下
觀察發現/opt/weblogic/bea/weblogic90/server/native/hpux11/IPF32下面和native io相關的libmuxer.so沒有執行權限,chmod +x 後再次啓動錯誤信息不再出現

WebLogic-BEA-000402

啓動wls服務後的錯誤信息如下:
<BEA-000402> <There are: 5 active sockets, but the maximum number of socket reader threads allowed by the configuration is: 4. You may want to alter your configuratio

錯誤的原因
<BEA-000438> <Unable to load performance pack. Using Java I/O instead. Please ensure that 
libmuxer library is in :'/usr/java5_64/jre/bin:/usr/java5_64/jre/bin:/usr/java5_64/jre/bin/classic:
/usr/java5_64/jre/bin:/wls/weblogic/bea/patch_weblogic923/profiles/default/native:/wls/weblogic/bea/
weblogic92/server/native/aix/ppc:/usr/java5_64/jre/bin/j9vm:/usr/lib'> 


解決的方法

1.Weblogic Native IO 啓用失敗時,通常會在服務器啓動日誌中報如下錯誤:
<Error> <Socket> <BEA-000438> <Unable to load performance pack. Using Java I/O instead. 
Please ensure that libmuxer library is in :'/usr/java5_64/jre/bin:/usr/java5_64/jre/bin:/usr/java5_64/jre/bin/classic:/usr/java5_64/jre/bin
:/weblogic/bea/wlserver_10.0/server/native/aix/ppc:/usr/java5_64/jre/bin/j9vm:/usr/lib'

Weblogic Native IO 啓用失敗,通常是由於系統沒有使用與Weblogic 相對應的的JDK版本所致。
2.如果是AIX OS,AIX Weblogic 支持32位和64位的JDK,如果使用64位版本的JDK,需在啓動腳本中加指向64位對應的目錄,
同時在commEnv.sh 配置文件中,/weblogic/bea/wlserver_10.0/common/bin|commEnv.sh
AIX)
  if [ -n "${LIBPATH}" ]; then
    LIBPATH=${LIBPATH}:${WL_HOME}/server/native/aix/ppc64
  else
    LIBPATH=${WL_HOME}/server/native/aix/ppc64
  fi
  LIBPATH=${PATCH_LIBPATH}:${LIBPATH}
  export LIBPATH

WEBLOGIC 默認的指向是ppc目錄,不是ppc64目錄,如果ppc64已經存在,則修改次配置即可,如果沒有就要去下載或者去問工程師要libmuxer.so文件。

Oracle的官方網站下載此平臺部署必須要打的那個補丁文件。更簡單的解決方法是mailOracle支持工程師,將libmuxer.so文件mail給你替換(?/weblogic/bea/weblogic92/server/native/aix/ppc/)目錄下的libmuxer.so文件,重新啓動weblogic服務,應該就不會再報BEA-000402錯誤,你的異步I/O也將正常加載。 

3. 使用 Weblogic Native IO 對系統性能至少有30%的提升(這個BEA 工程師說的),在生產環境中,注意檢查 Native IO 是否可用。同時在安裝Weblogic時,注意使用與之相對於版本的JDK。注意OS版本,和位數一定要搞清楚,並對應上。

在網上有不少關於WebLogic Native IO問題的文章,我挑選了3個最典型的例子做一下總結說明:以下的3個案例,雖然都跟Native IO有關,但實際情況不太相同,有相應平臺32位跟64位的問題,也有執行權限的問題,希望讀者能仔細去辨別。

3.11 典型案例一

a) 平臺信息:

OSAIX5308

JDKjava5_64

WLSBEA Weblogic Server 10.0

b) 故障現象:

1.啓動Weblogic時,服務器啓動日誌中報如下錯誤:

<Error> <Socket> <BEA-000438> <Unable to load performance pack. Using Java I/O instead. 

Please ensure that libmuxer library is in :’

/usr/java5_64/jre/bin:/usr/java5_64/jre/bin:/usr/java5_64/jre/bin/classic:/usr

/java5_64/jre/bin

:/weblogic/bea/wlserver_10.0/server/native/aix/ppc:/usr/java5_64/jre/bin/j9vm

:/usr/lib’

2. 同時,在系統使用過程中,報如下錯誤:

<Warning> <Socket> <BEA-000402> <There are: 5 active sockets, but the maximum number of socket reader threads allowed by the configuration is: 4.

You may want to alter your configuration.> 

c) 故障分析:

根據經驗,以上報錯信息表明Weblogic Native IO啓動失敗。

d) 故障解決:

1. Weblogic Native IO 啓用失敗,通常是由於系統沒有使用與Weblogic 相對應的的JDK版本所致。

2. AIX Weblogic 支持32位和64位的JDK,如果使用64位版本的JDK,需在啓動腳本中加指向64位對應的目錄,

同時在 commEnv.sh 配置文件中,/weblogic/bea/wlserver_10.0/common/bin|commEnv.sh

AIX)

  if [ -n "${LIBPATH}" ]; then

    LIBPATH=${LIBPATH}:${WL_HOME}/server/native/aix/ppc64

  else

    LIBPATH=${WL_HOME}/server/native/aix/ppc64

  fi

  LIBPATH=${PATCH_LIBPATH}:${LIBPATH}

  export LIBPATH

WEBLOGIC 默認的指向是ppc目錄,不是ppc64目錄,當時爲了下載64位的libmuxer.so浪費了很長的時間,後來發現weblogic的目錄下面已經存 在64位的。

3. 使用 Weblogic Native IO 對系統性能至少有30%的提升,在生產環境中,注意檢查 Native IO 是否可用。同時在安裝Weblogic時,注意使用與之相對於版本的JDK

3.12 典型案例二

a) 平臺信息:

HP-UX

Weblogic923

b) 故障現象:

1.Weblogic Native IO 啓用失敗時,通常會在服務器啓動日誌中報如下錯誤:

####<Mar 31, 2009 9:09:29 PM GMT+08:00> <Debug> <RJVM> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’0′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238504969950> <BEA-000571> <Network Configuration Detail for Channel "managered_server1"

Channel Weight   50

Accept Backlog   50

Login Timeout   5000ms

Max Message Size  10000000

Message Timeout  60s

Idle Timeout   65s

Tunneling Timeout  40s

Tunneling Ping   45s> 

####<Mar 31, 2009 9:09:29 PM GMT+08:00> <Info> <Server> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’0′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238504969974> <BEA-002609> <Channel Service initialized.> 

####<Mar 31, 2009 9:09:29 PM GMT+08:00> <Error> <Socket> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’0′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238504969989> <BEA-000438> <Unable to load performance pack. Using Java I/O instead. Please ensure that a native performance library is in: ‘/weblogic/opt/java1.5/jre/lib/IA64N:/weblogic/opt/java1.5/jre/lib/IA64N/server:

/weblogic/opt/java1.5/jre/../lib/IA64N:/weblogic/bea/patch_weblogic920/profiles

/default/native:

/weblogic/bea/weblogic92/server/native/hpux11/IPF32:/weblogic

/bea/weblogic92

/server/native/hpux11/IPF32/oci920_8:/usr/lib’

2. 同時,在系統使用過程中,常見報如下錯誤:

####<Apr 1, 2009 8:25:18 PM GMT+08:00> <Warning> <Socket> <odsapp1> <managered_server1> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1238588718157> <BEA-000402> <There are: 5 active sockets, but the maximum number of socket reader threads allowed by the configuration is: 4. You may want to alter your configuration.>

####<2009-4-3 下午092555秒 GMT+08:00> <Error> <HTTP> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’4′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238765155550> <BEA-101019> <[weblogic.servlet.internal.WebAppServletContext@1f5acd0 - appName: 'ODSWeb', name: 'ODSWeb', context-path: ''] Servlet failed with IOException

java.net.SocketException: 管道斷開 (errno:32)

at java.net.SocketOutputStream.socketWrite0(Native Method)

at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:97)

at java.net.SocketOutputStream.write(SocketOutputStream.java:141)

at weblogic.utils.io.ChunkedOutputStream.writeTo(ChunkedOutputStream.java:185)

at weblogic.servlet.internal.ResponseHeaders.writeHeaders(ResponseHeaders.java:348)

at weblogic.servlet.internal.ServletResponseImpl.writeHeaders(ServletResponseImpl.

####<Apr 3, 2009 11:11:49 AM GMT+08:00> <Error> <HTTP> <odsapp1> <managered_server1> <[ACTIVE] ExecuteThread: ’10′ for queue: ‘weblogic.kernel.Default (self-tuning)’> <<WLS Kernel>> <> <> <1238728309518> <BEA-101017> <[weblogic.servlet.internal.WebAppServletContext@b9614d - appName: 'ODSWeb', name: 'ODSWeb', context-path: ''] Root cause of ServletException.

java.lang.OutOfMemoryError: unable to create new native thread

at java.lang.Thread.start0(Native Method)

at java.lang.Thread.start(Thread.java:574)

at javelin.client.ThreadPool.<init>(ThreadPool.java:49)

at javelin.client.ClientUtilsImpl.<init>(ClientUtilsImpl.java:92)

at javelin.client.ClientUtilsImpl.get(ClientUtilsImpl.java:106)

at com.bea.compiler.client.ClientUtils.get(ClientUtils.java:36)

c) 故障分析:

該故障很明顯是在HP-UXWebLogic Native IO啓動失敗。

d) 故障解決:

1. Weblogic Native IO 啓用失敗,通常是由於系統沒有使用與Weblogic 相對應的的JDK版本所致。

2. 應當值得注意的是,在HP-UX中,通常存在 PA-RISCItanium兩個版本的Weblogic,如果在PA-RISC平臺安裝Itanium平臺版本的Weblogic,或者在 Itanium平臺安裝PA-RISC平臺版本的Weblogic,同樣會導致 Native IO 不可用。

3. HP-UX Weblogic 9.2 支持32位和64位的JDK,如果使用64位版本的JDK,需在啓動腳本中加 -d64 參數,同時在commEnv.sh 配置文件中,注意修改“/weblogic/bea /weblogic92/server/native/hpux11 /IPF32”,使其指向“/weblogic/bea/weblogic92/server/native/hpux11/IPF64”,否則會也會導致 Native IO 啓用失敗 。

4. 使用 Weblogic Native IO 對系統性能至少有30%的提升(這個BEA 工程師說的),在生產環境中,注意檢查 Native IO 是否可用。同時在安裝Weblogic時,注意使用與之相對於版本的JDK

3.13 典型案例三

a) 平臺信息:

HP-UX

Weblogic90

b) 故障現象:

啓動過程中發現

<Apr 28, 2010 6:27:15 PM GMT+08:00> <Error> <Socket> <BEA-000438> <Unable to loa 

d performance pack. Using Java I/O instead. Please ensure that a native performa 

nce library is in: ‘/opt/java1.5/jre/lib/IA64N:/opt/java1.5/jre/lib/IA64N/server 

:/opt/java1.5/jre/../lib/IA64N::/opt/weblogic/bea/weblogic90/server/native/hpux1 

1/IPF64:/opt/weblogic/bea/weblogic90/server/native/hpux11/PA_RISC:/opt/

weblogic/ bea/weblogic90/server/native/hpux11/PA_RISC/oci920_8:/usr/lib’

沒有啓動native io,導致系統性能低下(這裏要注意HP-UXIA64N下的是32JDKIA64W下的纔是64JDK),而且java io配置的值較小,產生如下報錯

<Apr 28, 2010 6:15:03 PM GMT+08:00> <Warning> <Socket> <BEA-000402> <There are: 

5 active sockets, but the maximum number of socket reader threads allowed by the 

configuration is: 4. You may want to alter your configuration.>

在應用使用過程中從而出現

<Apr 28, 2010 6:14:10 PM GMT+08:00> <Error> <Console> <BEA-240003> <Console enco 

untered the following error javax.servlet.jsp.JspException: Broken pipe (errno:3 

2) 

        at com.bea.console.taglib.html.tree.TreeTag.print(TreeTag.java:231) 

        at com.bea.console.taglib.html.tree.TreeTag.doEndTag(TreeTag.java:192)

觀察控制檯的thread信息

Self-Tuning Thread Pool     

Active Execute Threads    Execute Thread Total Count    Execute Thread Idle Count    Queue Length    Pending User Request Count    Completed Request Count    Hogging Thread Count    Standby Thread Count    Throughput    Health 

16    58    15    6048    0    144840    4    38    4.577865205875421    OK

排隊的請求數多達6000個,導致了OutOfMemory,在JAVA堆還很空的情況下

c) 故障解決:

觀察發現/opt/weblogic/bea/weblogic90/server/native/hpux11/IPF32下面和native io相關的libmuxer.so沒有執行權限,chmod +x 後再次啓動錯誤信息不再出現

 

最近玩SOA時發現WEBLOGIC啓動後控制檯反應非常遲鈍,打開日誌後發現WEBLOGIC報告如下錯誤:

<BEA-000402> <There are: 5 active sockets, but the maximum number of socket reader threads allowed by the configuration is: 4. You may want to alter your configuration。

網上查閱資料後得知原因爲

<BEA-000438> <Unable to load performance pack. Using Java I/O instead. Please ensure that
libmuxer library is in :'/usr/java5_64/jre/bin:/usr/java5_64/jre/bin:/usr/java5_64/jre/bin/classic:
/usr/java5_64/jre/bin:/wls/weblogic/bea/patch_weblogic923/profiles/default/native:/wls/weblogic/bea/
weblogic92/server/native/aix/ppc:/usr/java5_64/jre/bin/j9vm:/usr/lib'>

由於我的操作系統是SOLARIS 10(5.10) SPARC 64 位

解決的方法

1.當Weblogic Native IO 啓用失敗時,通常會在服務器啓動日誌中報如下錯誤:
<Error> <Socket> <BEA-000438> <Unable to load performance pack. Using Java I/O instead.
Please ensure that libmuxer library is in :'/usr/java5_64/jre/bin:/usr/java5_64/jre/bin:/usr/java5_64/jre/bin/classic:/usr/java5_64/jre/bin
:/weblogic/bea/wlserver_10.0/server/native/aix/ppc:/usr/java5_64/jre/bin/j9vm:/usr/lib'

Weblogic Native IO 啓用失敗,通常是由於系統沒有使用與Weblogic 相對應的的JDK版本所致。
2.我用的64位系統,並且JDK使用的是64位的,因此做了如下修改:
commEnv.sh 配置文件中,/weblogic/bea/wlserver_10.3/common/bin|commEnv.sh

SUN_ARCH_DATA_MODEL="64"

將SUN_ARCH_DATA_MODEL改爲64

JAVA_USE_64BIT改爲true

JAVA_USE_64BIT=true

重啓WEBLOGIC後,問題解決。

3.使用 Weblogic Native IO 對系統性能至少有30%的提升(這個BEA 工程師說的),在生產環境中,注意檢查 Native IO 是否可用。同時在安裝Weblogic時,注意使用與之相對於版本的JDK。注意OS版本,和位數一定要搞清楚,並對應上。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章