Tag Archive: WebLogic


        由於JSP會在Run-time時才會作Compile,所以當WebLogic上在deploy程式之後,第一次使用到這個頁面的時候,就會覺得系統緩慢,要等很久畫面才會跳出來,而且如果當時有多個使用者連線進來使用時,同時間要Compile這麼的JSP檔也很耗系統的resource,也會加重對Server Loading,所以如果能在deploy程式的時候就先將JSP compile好,那使用者在第一次使用的時候就不會覺得慢了,Server在服務User的時候,也就不用再耗費額外的資源去做JSP Compile的動作了。

        要作Pre-Compile我知道的有兩種方式,一種是在build file的時候就對JSP作Pre-Compile,另一種只要修改在WAR檔內的weblogic.xml增加一個設定,weblogic就會在deploy時先做Pre-Compile的動作了。

一、先講簡單型的,修改war檔內的WEB-INF/weblogic.xml的設定,增加


.....................
.....................

	
		precompile
		true
	

.....................
.....................


 

如此WebLogic就會在deploy這個WebApplication時,就會對JSP執行Pre-Compile的動作,不過這種方式的缺點就是:
1、Start Weblogic Server的時候會變很長,因為每次restart Server就會做compile。
2、如果JSP的數量太多,也不太適合用這種方法,因為Server Loading太重,很可能Start WebLogic Server 半小時一小時還起不完。
3、如果執行Pre-Compile失敗,那整個WebApplication都不會deploy成功。

二、使用weblogic.appc指令進行pre compile

Examplejava -classpath weblogic.jar;webservices.jar;tools.jar;. weblogic.appc -verbose -forceGeneration -keepgenerated -O query.war

範例如上,紅色部份則改成需要編譯的war檔名稱,執行時appc程式會自動將原本的war解開後pre-compile jsp並將完成compile的class檔案輸出至WEB-INF/classes/jsp_servlet/目錄下後重新再產生成新的 war 檔,另外在執行weblogic.appc需要weblogic.jar;webservices.jar這些jar檔,如果個人電腦有安裝bea weblogic可修改classpath後面jar的指定路徑即可。

有關weblogic.appc 這個指令詳細的參數說明如下請參考
Usage: java weblogic.appc [options]
where options include:
    -help                  Print the standard usage message.
    -version              Print version information.
    -output  <file> Specifies an alternate output archive or directory.
                               If not set, output will be placed in the source archive or directory.
    -forceGeneration  Force generation of EJB and JSP classes.
                               Without this flag the classes may not be regenerated if it is
                               determined to be unnecessary.
    -lineNumbers       Add JSP line numbers to generated class files to aid in debugging.
    -keepgenerated    Keep the generated .java files.
    -verbose              Compile with verbose output.
    -classpath <path> Classpath to use.
    -advanced            Print advanced usage options.

 

  WebLogic用了一段時間之後,偶爾總是會出現OutOfMemory,這對測試環境來說,還只要Restart Server 就可以解決,但是在正式環境上出現可就麻煩大了,因為一Restart Server 所有User就都無法使用系統,所以MEM_ARGS這個參數的設定就很重要。

這是我SIT目前的設定,依不同的系統做不同的設定
MEM_ARGS="-Xms768m -Xmx768m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=384m -XX:PermSize=384m -XX:SurvivorRatio=6 -XX:+DisableExplicitGC"
提示:以上記得要寫成一行。

Heap Size設定
-Xms
設定一開始的Heap Size。
-Xmx 設定Heap Size的最大值 (最好是不是超過實體記憶體的80%)。
-XX:NewSize 調整JVM的Young Generation的size大小。
-XX:MaxNewSize 調整JVM的Young Generation的size的最大值。
Xmn Young Generation的size,NewSize 和 MaxNewSize設定為一樣。
-XX:NewRatio 控制Young generation的比例,如-XX:NewRatio=3表示Young generation與Old generation的比例為1:3,即Young generation佔1/4,Old generation佔3/4。
Young generation又被分成三部分,第一部分Eden,用於生成新的Object。另外兩個部分為Survivor空間,當Eden用完後,會將Objects複製到"SS1",當SS1空間滿了的時候,再被複製到"SS2",Objects會在Survivor空間不斷的被複製,直到他滿足條件進入Old generation止。
提示:如果將Heap Size設的越大,GC的週期就會拉長,而且每次GC的時間也會越長。

PermGen space
-XX:PermSize 這一部分是用於存放Class和Meta的訊息,Class在被 Load的時候被放入PermGen space區域,它和和存放Instance的Heap區域不同,GC(Garbage Collection)不會在主程式運行期間對PermGen space進行清理,所以如果你的APP會LOAD很多CLASS的話,就很可能出現PermGen space錯誤。這種錯誤常見在web伺服器對JSP進行pre compile的時候。

整個記憶體配置會像這樣 

-XX:+DisableExplicitGC 加了這個參數會停止掉WLS或是程式內直接呼叫GC,減少不必要的GC,將GC交由JVM去執行。

Garbage Collection描述:
Garbage Collection分多種等級,0級就是全部的垃圾回收(Full GC),會回收Old generation中的垃圾;1級或以上為部分垃圾回收,只會回收Young中的垃圾,會發生OutOfMemory通常是產生於Old generation或Perm段垃圾回收后,仍然沒有記憶體空間來存放新的Java 物件的情況。

當一個URL被訪問時,記憶體的配置過程如下:
A. JVM會試圖為Java的相關對象在Eden中初始化一塊記憶體空間
B. 當Eden空間足夠時,記憶體配置結束。否則到下一步
C. JVM會試圖釋放在Eden中所有不活躍的對象(這是屬於1或更高級的垃圾回收);釋放後若Eden空間仍然不足以放入新對象,則會試圖將部分Eden中活躍的對象放入Survivor區/OLD區
D. Survivor區被用來作為Eden及OLD的中間交換區域,當OLD區空間足夠,Survivor區的對象會被移到Old區,否則被保留在Survivor區
E. 當OLD區空間不足時,JVM會在OLD區進行完全的垃圾收集(0級)
F. 完全垃圾收集后,若Survivor及OLD區仍然無法存放從Eden複製過來的部分對象,就會導致JVM無法在Eden區為新的對象配置出記憶體區塊,產生"out of memory的錯誤"

以我的設定為例:
MEM_ARGS="-Xms768m -Xmx768m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=384m -XX:PermSize=384m -XX:SurvivorRatio=6 -XX:+DisableExplicitGC"

在上面的例子中:
YOUNG+OLD: 768M
YOUNG: 256M
Perm: 384M
Eden: YOUNG*6/(6+1+1)=192M
Survivor: YOUNG*1/(6+1+1)=32M

Heap Size: YOUNG+OLD+Perm=1024M

 

  以上是WebLogic記憶體參數的一些基本的設定,太難的我也不會,只是整理一些心得而己,提供做一下參考。

Content Protected Using Blog Protector By: PcDrome.