1. 程式人生 > >weblogic8.1常見問題彙總

weblogic8.1常見問題彙總

導讀:如果經常出現記憶體溢位的問題話檢視日誌,這樣類似Executethread開頭的可能是執行緒資源耗盡的問題,bea\user_projects\domains\mydomain下可以檢視日誌,如果出現關閉的連線錯誤,可以在配置連線池的時候設定,選中測試返回的連線和請求的連線.如果經常出現記憶體溢位的問題話檢視日誌,如果出現Executethread:'7'forqueue:' 

如果經常出現記憶體溢位的問題話檢視日誌,如果出現Executethread: '7' for queue:'weblogic.kernel.default'

這樣類似Executethread開頭的可能是執行緒資源耗盡的問題,如果是24說明是物件鎖沒釋放。

怎樣檢視weblogic 目前可用的執行緒數 ?

console控制檯上myserver-下面的Monitoring的tab-Performance 中的Idle Threads顯示的數目就是(下面有)

WebLogic Server 效能及調整:

檢視使用 WebLogic 8.1 執行緒緩衝池模型

效能檢視:

調整weblogic的使用記憶體

修改對應的domain下面的啟動指令碼,比如:weblogic安裝目錄下對應domain的啟動指令碼:startWeblogic.sh,追加

Windows:

set MEM_ARGS=-Xms2045m -Xmx2560m

Unix:

MEM_ARGS="-Xms1024m -Xmx2048m"

注:Xms表示最小記憶體,Xmx表示最大記憶體。

主要內容

1、WebLogic服務的監控

2、WebLogic效能優化

3、UNIX操作命令介紹

WebLogic服務的監控

WebLogic的控制檯console對記憶體的監控

Console --> server --> myserver --> 右邊視窗Mornitoring --> Performance

WebLogic服務的監控

 Idle Threads 空閒執行緒數

這個值不能為0,否則意味著系統無執行緒可用,有宕機的危險.

Queue Length 等待佇列的長度

Idle Threads的值為0時,Queue Length會出現數值。如果Queue Length維持在較高位置,且不下降時,有宕機危險。但只要值在變,就說明系統還在執行.

WebLogic服務的監控

Memory Usage 記憶體的使用情況

主要看垃圾回收是否頻繁,在系統高負載的情況下,記憶體是否能達到80-90%的使用率。

WebLogic服務的監控

檢視執行緒的執行情況

執行緒是否都為空閒null狀態。如不為空閒,看看是什麼樣的請求在佔用執行緒。

Console --> server --> myserver --> 右鍵選單View Execute Threads

如下圖所示:

WebLogic服務的監控

? Current Request 當前執行緒正在處理的請求

? 被佔用的執行緒的情況:46、48、49

佔用內容:Socket Reader Request

WebLogic效能優化——記憶體

一般建議正式的域(Domain)設定為-Xms1024m -Xmx1024m,表示堆的初始大小和最大值都是1024M。

1、修改檔案:Unix為startWebLogic.sh或startManagedWebLogic.sh(叢集用);Windows系統為startWebLogic.cmd或startManagedWebLogic.cmd(叢集用)。

2、修改位置:為保證我們修改的引數生效,最好將記憶體引數命令列放在啟動Java虛擬機器之前。示例如下:

WebLogic效能優化——記憶體

 export CLASSPATH

 MEM_ARGS="-Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m"

 # Call WebLogic Server

 echo "."

 echo "CLASSPATH=${CLASSPATH}"

 echo "."

 echo "PATH=${PATH}"

 echo "."

 echo "***************************************************"

 echo "* To start WebLogic Server, use a username and *"

 echo "* password assigned to an admin-level user. For *"

 echo "* server administration, use the WebLogic Server *"

 echo "* console at http://[hostname]:[port]/console *"

 echo "***************************************************"

 ${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} ${JAVA_OPTIONS} -Dweblogic.Name=${SERVER_NAME}

-Dweblogic.ProductionModeEnabled=${PRODUCTION_MODE}

-Djava.security.policy="${WL_HOME}/server/lib/weblogic.policy" weblogic.Server

WebLogic效能優化——記憶體

 3、注意Unix與Windows的引數差別。AIX和Linux的引數值要加上雙引號,Windows則不需要加。如該加的沒加,不該加的加了,就會導致設定的引數不起作用,影響應用系統的效能。

 4、Unix系統下引數是否生效的檢查。可以使用如下命令:

ps –ef|grep java

如果設定的引數生效,在顯示的結果中會看到設定的值。如沒有生效,會顯示weblogic預設的值-Xms32m –Xmx200m。

WebLogic效能優化——記憶體

 5、Windows下可以使用echo命令,在startWebLogic.cmd檔案中檢視

echo %MEM_ARGS%

會在dos視窗中輸出記憶體設定的資訊。

WebLogic效能優化——執行緒數

 執行緒數Thread Count

weblogic服務在接收到請求後,會交給後臺的執行緒來處理,執行緒數決定了併發處理能力的大小。

一般以伺服器的CPU個數為基準,每個CPU可負擔25個執行緒,最好不要超過50個

 檢視執行緒的執行情況,上面已經提到。

WebLogic效能優化——執行緒數

 更改執行緒數Thread Count

server ——> 右鍵選單 ——> “View Execute Queues”項檢視,如下圖:

點選“default”,進入修改頁面:

WebLogic效能優化——執行緒數

 修改了thread count的值後,要點選“應用(Apply)”按鈕,並重啟服務後,引數才能生效。

WebLogic效能優化——連線池

資料庫連線池的初始連線數建議200或以上,如資源允許可設定得更大,但不能操作最大連線數,最大連線數設定800。

 Oracle的引數processes設定為1000或以上。

 檢視連線池:console->services ->Connection Pools

1、 如何給weblogic指定大小的記憶體?

在啟動Weblogic的指令碼中(位於所在Domian對應伺服器目錄下的startServerName),增

加set MEM_ARGS=-Xms32m -Xmx200m,可以調整最小記憶體為32M,最大200M

2、 如何設定的weblogic的熱啟動模式(開發模式)與產品釋出模式?

可以在管理控制檯中修改對應伺服器的啟動模式為開發或產品模式之一。或者修改服務

的啟動檔案或者commenv檔案,增加set PRODUCTION_MODE=true。

3、 如何啟動時不需輸入使用者名稱與密碼?

修改服務啟動檔案,增加 WLS_USER和WLS_PW項。也可以在boot.properties檔案中增加

4、 在weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jms及ejb或

連線池等相關資訊進行配置後,實際儲存在什麼檔案中?

儲存在此Domain的config.xml檔案中,它是伺服器的核心配置檔案。

5、 說說weblogic中一個Domain的預設目錄結構?比如要將一個簡單的helloWorld.jsp

伺服器掛起:

問題描述

在出現以下情況時懷疑伺服器掛起:

伺服器不響應新的請求。 請求超時。

請求處理的時間越來越長(其最終結果可能是掛起)。

通常,伺服器掛起不會表現為伺服器崩潰,但伺服器掛起之後可能會崩潰。

故障排除

請注意,並非下面所有任務都需要完成。有些問題僅通過執行幾項任務就可以解決。 快速連結:

為什麼發生此問題? 伺服器掛起的可能原因 基本步驟

已知的 WebLogic Server 問題 收集 Thread Dump

Thread Dump 分析 為什麼發生此問題?

伺服器掛起有多種原因(請參考伺服器掛起的可能原因一節)。一般而言,伺服器掛起是因

為缺少某種資源。缺少資源會阻止伺服器響應服務請求。例如,由於故障(死鎖)或者大量請求的緣故,可能沒有任何可用的執行執行緒來完成工作,所有執行執行緒都被佔用或忙於處理以前的請求。

伺服器掛起的可能原因

主題 模式名稱 連結

RMI、RJVM 響應 - 所有繫結執行緒等待 RJVM、RMI 響應。 EJB_RMI 伺服器掛起 EJB_RMI 伺服器掛起

應用程式死鎖 - 執行緒鎖定資源 1,然後等待鎖定資源 2。另一個執行緒鎖定資源 2,然後等待鎖定資源 1。 應用程式死鎖導致伺服器掛起 待定

執行緒全部被佔用,沒有執行緒可用於新工作。 執行緒佔用導致伺服器掛起 待定 垃圾回收花費太多時間。 垃圾回收導致伺服器掛起 待定

servlet 時間的 JSP 錯誤設定,比如 PageCheckSeconds。 JSP 導致伺服器掛起 待定 死鎖造成 JDBC 掛起。 JDBC 中的伺服器掛起 待定

(程式碼優化)過程中的 JVM 掛起類似於伺服器掛起。 程式碼優化中伺服器掛起 待定 在大量負載情況下 JSP 編譯造成伺服器掛起。 JSP 編譯導致伺服器掛起 待定 SUN JVM 錯誤,比如輕量型執行緒庫。 Sun JVM 錯誤導致伺服器掛起 待定 返回頁首

基本步驟

當伺服器掛起時,首先使用 java weblogic.Admin t3://server:port PING 來 ping 該伺服器。如果伺服器能夠響應此 ping,則可能是應用程式正在掛起而不是伺服器自身。

確保伺服器確實正在掛起,而不是在做垃圾回收。若要驗證掛起,啟用 -verbosegc 重新啟動伺服器,然後將 stdout 和 stderr 重定向到一個檔案中。當伺服器停止響應時,可以判斷它是正在收集無用資訊還是確實掛起。

WebLogic Server 使用“Default”執行緒佇列響應客戶端服務請求。這些是在發生伺服器掛起時應當檢查的執行緒。下面是其中一個執行緒在 Thread Dump 中的形式示例。Execute Thread 14 正在等待任務。該執行緒呼叫的最後方法是 Object.wait()。

\'14' for queue: 'default'\daemon prio=5 tid=0x8b0ab30 nid=0x1f4 waiting on monitor [0x96af000..0x96afdc4] at

java.lang.Object.wait(Native Method) at

java.lang.Object.wait(Object.java:420)

at

weblogic.kernel.ExecuteThread.waitForRequest(ExecuteThread.java:94) at

weblogic.kernel.ExecuteThread.run(ExecuteThread.java:118)

確定“Default”ExecuteThread 佇列是否超載。利用控制檯確定“Default”佇列中的所有 ExecuteThreads 是否空閒。如果沒有一個空閒,則應用程式可能需要一個更大的 ExecuteThread 數來配置。可以通過控制檯更改該值,並將其儲存在 config.xml 檔案中。

如果執行佇列有空閒執行緒,則可能沒有分配足夠的 Socket Reader 執行緒。預設情況下,WebLogic Server 例項在啟動時建立三個 Socket Reader 執行緒。如果群集系統在高峰期使用的 Socket Reader 執行緒超過三個,則增加 Socket Reader 執行緒的數量。

通常,Socket Reader 執行緒的數量應當較小。但是,如果 Weblogic Serve 充當正在掛起的伺服器例項的客戶端,則應當為每個 Weblogic Serve 配置一個執行緒。

如果使用 JDBC 連線池,確保池中已經配置的 JDBC 連線數量與同時請求(即執行執行緒)的數量相等。

Thread Dump 分析

分析伺服器掛起的最有用的工具是一系列 Thread Dump。Thread Dump 提供關於每個執行緒在特定時刻正在執行什麼操作的資訊。一系列 Thread Dump(一般每隔 5 到 10 秒進行三個或更多 Thread Dump)可以幫助分析每個執行緒從一個 Thread Dump 到另一個 Thread Dump 過程中的狀態變化或所缺少的變化。掛起伺服器 Thread Dump 一般顯示執行緒狀態從第一個 Thread Dump 到最後一個 Thread Dump 中變化很小。

在 Thread Dump 中檢視的內容

所有請求都通過 ListenThread 進入 WebLogic Server。如果 ListenThread 丟失,就無法接收任何工作,因此也無法完成任何工作。確認在 Thread Dump 中存在 ListenThread。ListenThread 應當在 socketAccept 方法中。下面示例說明監聽執行緒 (Listen Thread) 的形式。

\prio=10 tid=0x00037888 nid=93 lwp_id=6888343 runnable [0x 1a81b000..0x1a81b530]at java.net.PlainSocketImpl.socketAccept(Native Method) at

java.net.PlainSocketImpl.accept(PlainSocketImpl.java:353) - locked <0x26d9d490> (a java.net.PlainSocketImpl) at

java.net.ServerSocket.implAccept(ServerSocket.java:439)

at

java.net.ServerSocket.accept(ServerSocket.java:410) at

weblogic.socket.WeblogicServerSocket.accept(WeblogicServerSocket.java:24) at

weblogic.t3.srvr.ListenThread.accept(ListenThread.java:713) at

weblogic.t3.srvr.ListenThread.run(ListenThread.java:290)

Socket Reader 執行緒接受來自監聽執行緒佇列的傳入請求,並將該請求放入執行執行緒佇列。如果 Thread Dump 中沒有 Socket Reader 執行緒,則在某個地方存在導致 Socket Reader 執行緒消失的錯誤。應當始終保持至少有三個 Socket Reader 執行緒。一個 Socket Reader 執行緒一般用於輪詢功能,另外兩個用於處理請求。下面是一個 Thread Dump 示例中的 Socket Reader 執行緒。

\lwp_id=6888070 waiting for monitor entry [0x1b12f000..0x1b12f530] at

weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:92) - waiting to lock <0x25c01198> (a java.lang.String) at

weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32) at

weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178) at

weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)

\lwp_id=6888067 runnable

weblogic.socket.PosixSocketMuxer.poll(Native Method)

[0x1b1b0000..0x1b1b0530]at

at

weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:99) - locked <0x25c01198> (a java.lang.String) at

weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32) at

weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178) at

weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)

\lwp_id=6888066 waiting for monitor entry [0x1b231000..0x1b231530]

at

weblogic.socket.PosixSocketMuxer.processSockets(PosixSocketMuxer.java:92) - waiting to lock <0x25c01198> (a java.lang.String) at

weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32) at

weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:178) at

weblogic.kernel.ExecuteThread.run(ExecuteThread.java:151)

ThreadPoolPercentSocketReaders 屬性設定要用於從 java Socket 中讀取訊息的執行執行緒的最大百分比。此屬性的最佳值是針對應用程式設定的。預設值為 33,有效範圍是 1 到 99。

分配執行執行緒充當 Socket Reader 執行緒可提高伺服器接受客戶端請求的速度和能力。必須平衡專門用於從 Socket 讀取訊息的執行執行緒和那些在伺服器中執行實際執行任務的執行緒的數量。

後續步驟

後續步驟要求進一步分析 Thread Dump。檢查 Thread Dump,瞭解每個執行緒在伺服器掛起時正在執行的操作。這有助於分析下一個探查階段。例如,如果 JSP 編譯中涉及許多執行緒,參考伺服器掛起的可能原因一節可瞭解進一步的診斷和測試操作。

weblogic忘記密碼如何處理

1. 備份當前domain的config.xml、fileRealm.properties和SerializedSystemIni.dat

2. 新建一個叫fileRealm.properties.src的檔案,其內容為:user.system=weblogic ,其中weblogic就是您想要的明文的密碼

3. 開啟dos視窗/控制檯,cd到當前domain的目錄,呼叫setEnv指令碼設定相關的環境變數,然後執行:

java weblogic.security.acl.internal.FileRealm fileRealm.properties SerializedSystemIni.dat

4. 將原來的fileRealm.properties中acl、group相關的條目拷回到新生成的fileRealm.properties裡邊

5. 將config.xml裡邊加密過的密碼(以{3DES}開頭)改成明文的。

6. 啟動weblogic

執行java -cp /usr/local/bea/weblogic92/server/lib/weblogic.jar weblogic.security.utils.AdminAccount <新使用者名稱> <新密碼> .(注意最後有個點的)

* 執行完後在當前目錄會生成一個新的DefaultAuthenticatorInit.ldift檔案,然後替換原來的/security/DefaultAuthenticatorInit.ldift

檔案。

* 從/servers/AdminServer/data/ldap/子目錄中刪除初始化狀態檔案DefaultAuthenticatormyrealmInit.initialized。

* 修改/servers/AdminServer/security/boot.properties中的使用者密碼為剛才新建的使用者密碼(明文),成功啟動後,weblogic會加密使用者密碼的。