解決Oracle+weblogic系統死機的問題

前段時間發佈的系統(Oracle+weblogic)頻繁掛掉,天天早上9點、下午2點高峯期就掛,糾結了很長時間,最終解決,方法描述下。web

執行select count(*),status from v$session group by status;指令,發現不活動鏈接數比較大,當上升到必定數值之和,就掛。數據庫

作了下面優化,包括數據庫的優化和WebLogic的優化。服務器

一、數據庫優化session

1)  建立pfile SQL>create pfile from spfile併發

檢查oracle

  • oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX'(準確路徑:/oracle/admin/ORADB/pfile/init.ora.352012231626)文件是否存在,備份到本地。

2)  web服務,備份數據庫,備份發佈的代碼less

3)  查看參數並記錄優化

    一、show parameter sgaspa

二、查看PGA_AGGREGATE_TARGET值操作系統

SELECT NAME, VALUE/1024/1024 MB

FROM v$pgastat

WHERE NAME IN ('aggregate PGA target parameter', 'global memory bound');

 

4)  修改pfile的內容

--alter system set sga_max_size=4096M scope=spfile ;

--alter system set sga_target= 4096M scope=spfile;

--alter system set pga_aggregate_target=2048M  scope=spfile ;

alter system set pre_page_sga=true scope=spfile ;

alter system set lock_sga=true scope=spfile;

    alter system set workarea_size_policy=auto scope=spfile ;

5)  修改limits.conf並重啓電腦

/etc/security/limits.conf這個配置文件中添加以下的一行(oracle是啓動數據庫的操做系統帳號),意思是oracle用戶能夠在物理內存中鎖住任意大的空間:

oracle - memlock unlimited

 而後重啓操做系統reboot

6)  若是啓動數據庫失敗,執行修復

startup pfile='……/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX'

7)  修改oracle鏈接池,並重啓數據庫

Oracle的sessions和processes的關係是
    sessions=1.1*processes + 5

 

SQL>show parameter processes;

SQL>alter system set processes=1000 scope = spfile;

SQL>show parameter session;

SQL>alter system set sessions=1105 scope = spfile;

 

二、優化WebLogic

 

 

1)  修改web服務器鏈接池

 

 weblogic所在服務器尚有26G內存,爲知足1000併發訪問量,能夠將數據源鏈接池最高設置爲2000。

 

 初始容量改成500    當前設置值3

 

最大容量改成2000   當前設置值200

 

容量增加改成100     當前設置值3

 

從新啓動weblogic

 

 

 

2)  修改web服務器JVM內存大小(參數待定)

 

找到安裝目錄下的weblogic\common\bin\commEnv.cmd文件

 

打開修改以下代碼:

 

sun

 

if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode

 

set JAVA_VM=-client

 

             set MEM_ARGS=-Xms1024mm-Xmx2048mm-XX:MaxPermSize=256m

 

 

 

set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none goto continue :sun_prod_mode set JAVA_VM=-server ...

 

 

 

3)  發佈新版程序

 

4)  重啓web服務器操做系統

 

三、最終解決

通過上述處理,系統有明顯優化,可是天天死機3次,早上8點,10點,下午3點左右。

 通過執行下面2個指令,分別查看線程的活動狀況和堆棧信息狀況,能夠跟蹤到哪一個方法致使系統堆棧延遲。

 top -H 這個命令是查看是哪一個線成比較忙

 jstack -l 8032 | less  這個命令是查看堆棧信息,堆棧延遲中能夠看到是執行了什麼方法致使的。沒有延遲就看不到,有延遲就能看到哪一個方法致使系統堵塞,後來發現有個方法代碼效率很低,並且訪問最頻繁,訪問高峯時間正好和死機的時間吻合。

優化方法以後,系統穩定了。

相關文章
相關標籤/搜索