歡迎光臨
每天分享高質量文章

通向架構師的道路 ( 第十五天 ) IBM Websphere 的安裝與最佳化

(點選上方公眾號,可快速關註)


來源:MSSQL123 ,

www.cnblogs.com/wy123/p/8419707.html

一、IBMWebsphere

02年開始接觸EJB1.x時,當時有一本巨肥厚無比的書叫作”ejb從入門到精通(master ejb2.0)”,紅皮的,wrox公司出版的。該書帶有1張光碟,光碟裡有3個App Server。

  1. Jboss2.2.1

  2. Weblogic6.1

  3. IBM Websphere ApplicationServer5.x

從那時起開始知道,哦,原來這3大廠商是做j2ee容器的。果然,時至今日這三大容器還是處於世界上無可爭議的地位。

因此,我們前面講了tomcat+apache(叢集), weblogic+apache(叢集),Websphere的基本應用與概念也是逃不了的。

Websphere現在已經在IBM的任何一個產品中佔據了主要的地位,幾乎各個IBM的企業級應用產品如:IBM iLog Jrulz, IBM Lombardi, IBM Websphere Portal Server, IBM TAM等等等,這些產品在安裝時第一個就是將IBM Websphere Application Server或者是IBM WebsphereApplication Server Network Deployment(WASND)先安裝在你的伺服器上。

因此我們很有必要去好好學習和掌握IBM WAS的安裝,與IBM HttpServer(被IBM改進過的商業級Apache Server)的整合以及WASND(用作叢集的IBM WAS安裝版)。

二、基本概念

IBM系列產品使用的是IBM自身帶的JDK,這個JDK也是被IBM進行過了改進的,被稱為IBMJDK。

該JDK和我們傳統的JDK即ORACLE-SUN的不太一樣,不要試圖去用前面所講的一系列的Oracle Sun的JDK裡的最佳化引數去應用在IBM JDK上,這是完全不對的。

而且,IBM JDK與IBM Websphere Application Server(WAS)之間的整合有嚴格要求:

IBM WAS6.X可以支援JDK1.5,如果你的工程裡有用到JDK1.6的特性,那麼在IBMWAS6.X上不要想跑起來。

IBM WAS7.x即後續版本可以支援JDK1.6,但是,你不要認為在IBMWAS6.x上能夠執行的跑到IBM WAS7.x上一樣可以執行,因為有些工程用到了IBM JDK的特性,比如說有些工程用到了IBM JDK中的webservice,結果在6.x上跑得挺好,到了7.x上死活跑不起來,沒辦法,這就是IBM JDK,它公司大,所以修改了一些東西為它自己的利益所服務。而不像我們的Oracle Sun的JDK目前還是遵照著標準,高版本一定相容低版本里編譯出來的東西。

說這個問題就是因為以前曾經發生過,有專案組用ssh2(struts2+spring3+hibernate3),結果客戶的環境是IBM WAS6.X,而專案開發用的是Tomcat6.x與jdk1.6,結果在實際production環境上佈署失敗,雖然後來透過補丁等一系列手段可以在IBM WAS6.X上佈署起工程來,但是前面已經給客戶帶來了極不好的影響。

為此,IBM公司還出了一套系結其WAS的開發工具即:IBM RAD,IBMRAD7.0只支援WAS6.X,而IBMRAD7.5即後續版本可以支援到WAS7.0並支援JDK1.6的相關特性,因此如果你的工程環境全部是IBM的WAS相關環境(WAS很貴,三大產品中最貴的要屬這個WAS了,買得起這個的客戶一般非銀行即大型保險公司),那麼也請你最好使用IBM RAD去開發相關的工程吧,讓客戶掏錢就是了!

三、WAS安裝

WAS的安裝包裡一般有一個launchpad.exe或者是在下載後的WAS安裝包.zip解壓後會有一個was目錄,該目錄中有一個install.exe檔案,目前的IBMWAS6.x系列不能在Win7下正常執行安裝程式,因此如果你的機器是win7,請安裝下麵這個設定截圖來修改WAS安裝程式的相關屬性,即可讓WAS6.X系列的安裝程式也能夠在win7下順利執行並安裝了。

如果你是WAS7.X ,那麼完全可以在win7下順利安裝,不需要修改任何屬性。

Launchpad執行後的主介面

下一步

設定你的WAS的安裝目錄,這邊這個”d:\IBM\WebSphere\AppServer”又被稱為“WAS.HOME”。

請在這一步時選擇“無”,一定記住,要不然WAS會建一個預設的server(類似於weblogic裡的domain)並且將它註冊為我們的windows的service,這是我們不需要的,我們將會在稍後的教程中使用命令列來啟動和停止我們的WAS,必竟以後我們在production環境中一般都使用64位的UNX或者是LNX,而非Windows。

下一步,下一步一路到底,然後開始安裝

安裝完了,請把“使用概要管理工具建立新的WebSphere Application Server概要檔案(R)”前的“勾”去掉,我們將使用選單來建立WAS的概要檔案(即相當於weblogic裡的domain)。點[完成]結束安裝。

安裝完後使用選單啟動我們的概要管理工具,概要管理工具會為你建立WAS的概要檔案,即profile,WAS的執行都是基於一個個profile的。

在概要管理工具的主介面點[啟動概要管理工具]這個按鈕。

點[建立]按鈕

選中“應用程式伺服器”,下一步

我們使用“高階概要檔案建立”。

下一步

下一步

概要檔案名,因為前面我們說過了概要檔案就是WAS內的一個server,一個WAS可以包含多個概要檔案。

因此這邊我們的概要檔案名為myserver1,而我們的物理位置也叫myserver1。

而該概要檔案指向的server name也為myserver1。

這裡用於配置我們的WAS的管理介面登入時所需的使用者名稱與密碼,我們使用:

loginId:  admin

password: password_1

此處的“預設金鑰庫密碼”我們全部設成“aaaaaa”,即六個a,然後下一步

這邊是設的是WAS的埠,常用的主要為:

9060(was console的埠)

9080(was應用程式佈署完後的埠,類似於tomcat的8080埠)

9043(was console的https埠)

9443(即was應用程式佈署完後的https埠,類似於tomcat的8443埠)

如果你的WAS已經事先建立過一個profile,你再建立一個profile,這些埠的數字都會自動在最未尾加一,比如說我們這個profile叫myserver1,那麼我們再建立一個myserver2,那麼myserver2在此處的埠自動會顯示成:

9061

9081

9044

9444

等等等。

下一步

請將“將應用程式服務行程作為Windows服務執行(R)”選擇前的“勾”去掉。

下一步

下一步,最後review一下,點[建立]按鈕

開始建立profile

建立完後

1. 把啟動第一步控制檯這個選項前的勾去掉。

2. 點選[完成]按鈕

該profile建立完成後我們的目錄結構如下截圖所示:

四、WAS的啟動與停止

4.1 啟動WAS

命令格式為:

startServer serverName –profileNameyourProfileName –username loginId –password password。

看到“行程標識為2360”,即代表我們的WAS啟動成功了。

啟動成功後可以透過http://localhost:9060/ibm/console這個地址來訪問我們的“管理控制檯”

該管理控制檯會自動將地址變為:https://localhost:9043 這樣的格式。

4.2 停止WAS

把startServer換成stopServer即可,後面引數一樣!

五、管理WAS

5.1 最佳化WebSphere

WebSphere裡的profile剛配完,一般預設的heapsize即Xms與Xmx值只有256mb,而IBM WAS是幾個J2EE伺服器中最吃記憶體的機器,在佈署一些EAR應用時,如果你的EAR中使用的lib即jar files較多,載入時往往會超出256mb的限制,如果你的WAS在安裝完後不進行適當的最佳化就用來佈署應用,很快就會成宕機狀,然後在相應的profile的目錄中會留下一堆的heapdump即記憶體out of memory並造成了was檔機後留下的dump檔案。

因此在裝完WAS配完profile後,請先進行適當的最佳化。

5.1.1 修改系統開啟檔案數(windows系統忽略)

如果你的機器為Linux/Unix,請:

調整Linux/Unix系統允許開啟的最大檔案數,系統預設一般為1024。

我們可以執行ulimit -n可檢視這個數值。

透過vi /etc/security/limits.conf加入以下兩行:

* soft nofile 300000

* hard nofile 300000

重新系統後透過ulimit -a可以檢視結果。

5.1.2 最佳化資料庫連線池

最佳化資料庫連線池,透過點選相應的datasource進入屬性頁後,點選“連線池屬性”可以進行連線池的最佳化(相關資料庫連線池最佳化見第八天之weblogic與apache的整合與調優中的4.2.5 小節調優Weblogic的資料源)。

5.1.3更改Web容器執行緒池大小

該引數在管理控制檯裡的“伺服器→應用程式伺服器→server1→執行緒池”的“WebContainer”中進行設定,將“最大大小”的預設值50改成40,“最小大小”的預設值10改成40。逐一對每個成員做相應的修改。

不要勾選“允許執行緒分配超過最大執行緒大小”。

 

5.1.4 更改會話超時和啟用servlet高速快取

該引數在管理控制檯裡的“伺服器→應用程式伺服器→server1→會話管理”的“會話超時”中進行設定,將預設的30改成15;在“伺服器→應用程式伺服器→server1→Web容器設定→Web容器”。逐一對每個成員做相應的修改。

記得Web容器裡勾選“啟用servlet高速快取”。

5.1.5更改JVM引數

即修改相應的heap size與新增一些JVM調優引數

該引數在管理控制檯裡的“伺服器→應用程式伺服器→server1→行程定義→Java虛擬機器”裡定義

點這個”Process Definition”,然後在下麵這個介面中點“Java Virtual Machine”

顯示下麵這個介面

註意:

這邊的Generic JVM arguments就是IBM的jvm最佳化引數了,但是此處的jvm最佳化引數不能直接套用我們在前面tomcat和weblogic中所提到過的相關jvm最佳化引數,因為這個是IBM JDK,和ORACLE-SUN的JDK不一樣的。

IBM JDK的JVM常用引數

-Xquickstart

此設定影響 IBM JVM 使用較低最佳化級別來編譯類方法的方式,這將提高伺服器啟動速度,但會使執行時效能下降。預設情況下,如果未指定此引數,IBM JVM 最初將使用較高的初始最佳化級別來執行編譯。此設定能夠提高執行時效能,但會減慢伺服器啟動速度。

-server

基於 Sun 的 Hotspot 技術的 JVM 最初使用低最佳化級別來編譯類方法。這些 JVM 使用簡單編譯器和能夠進行最佳化的 JIT 編譯器。通常情況下,使用簡單 JIT 編譯器。然而,可以透過設定此選項來使用能夠執行最佳化的編譯器。此更改將顯著提高伺服器的效能,但使用能夠執行最佳化的編譯器時,伺服器的預備時間將會較長。

-Xms與-Xmx

這個就不用多說了吧,前面的tomcat與weblogic的最佳化中提到過多次了。

註 意:

32位系統的JVM最大值不超過2048m,如果有充足的記憶體,可以多建立幾個節點叢集成員。

-Xgcpolicy

將 gcpolicy 設定為 optthruput 會禁用併發標記。如果沒有暫停時間問題(表現為應用程式響應時間不規律),那麼應該使用此選項來實現最大吞吐量。將 gcpolicy 設定為 optavgpause 會使用預設值來啟用併發標記。此設定將減少由正常垃圾回收所引起的應用程式響應時間不規律情況。然而,此選項可能會降低整體吞吐量。

-Xnoclassgc

預設情況下,當一個類沒有任何活動實體時,JVM 就會從記憶體中卸裝該類,但是這樣會使效能下降。如果關閉類垃圾回收,就可以消除由於多次裝入和卸裝同一個類而造成的開銷。

如果不再需要某個類,那麼該類在堆中所佔用的空間通常將用於建立新物件。但是,如果應用程式透過建立類的新實體來處理請求,並且該應用程式的請求是隨機出現的,那麼可能會發生以下情況:先前請求者完成後,正常的類垃圾回收將透過釋放這個類佔用的堆空間來清除這個類,但當下一個請求出現時,又必須將這個類重新實體化。在這種情況下,您可能想使用此選項來禁用類垃圾回收。

下麵是我本機上的一個設定,供參考:

-Xgcpolicy:gencon–Xnoclassgc

5.1.6 更改ORB服務

進入管理控制檯裡的“伺服器→應用程式伺服器→server1→ORB服務”,勾選“按取用傳遞”;執行緒池設定則選擇“使用與執行緒池管理器相關聯的 ORB.thread.pool 設定(建議)。”,點選“ORB.thread.pool”,修改“最小大小”的預設值10為40,“最大大小”的預設值50為40,不要勾選“允許執行緒分配超過最大執行緒大小”。逐一對每個成員做相應的修改。

5.1.7 去除應用程式的類重新裝入選項

進入管理控制檯裡的“應用程式→企業應用程式”,點選某一應用程式進入,點選“Web模組的 JSP 重新裝入選項”,將“JSP啟用類重新裝入”的勾去掉。

5.2 建立資料源

我們拿WAS來佈署一個web應用,那麼就需要先建立資料源,請按照下麵的步驟。

先建立JDBC Provider(提供程式)。

註意在下拉框中選擇具體的“作用域”,即類似於weblogic裡的target,然後點[新建]按鈕。

我們使用oracle11g來做我們的資料源。

[下一步]

類路徑保持預設,我們回頭會再給它具體指定。

點選[完成]後,註意要按這個“儲存”連線,在WAS裡作過任何東西的改動在點[確定]或者是[完成]後都會在adminconsole的右上端有這麼一個提示,一定要記得點這個“儲存”,要不然前面做的一切操作會被廢棄。

點選“儲存”後,我們的JDBC提供程式串列裡多了一項。

我們點一下這個“Oracle JDBC Driver”,對它進行設定。

在“類路徑”裡,我們填入完整的該ojdbc6.jar所在的路徑,註意要用“/”作路徑分隔符,而不是“\”。

設定完後點[確定]傳回,並點“儲存”。

我們的JDBCProvider有了,我們要設定我們的DataSource,將DataSource系結JDBC Provider後給它取個JNDI名,這個JNDI名就是我們工程中連線資料庫時需要指定的JNDI名了。

填入和我們的工程中一樣的JNDI名稱,此處“資料源名”與“JNDI名稱”不能同名啊,不要把“資料源名”和“JNDI名”搞錯了。

[下一步]

為我們的資料源指定前面設定的JDBC Provider。

填入你要連線的資料庫的相應的URL。

完成並儲存後傳回資料源設定串列,我們新設定的資料源已經在串列中了。

點這個我們剛才新建立的資料源。

我們現在有了jdbc driver,有了jdbc url,為了連線資料庫我們還需要什麼?使用者名稱 & 密碼,對吧!

點右邊這個“JAAS-J2C認證資料”。

為我們的認證起個名字,然後輸入使用者標識(資料庫連線使用者名稱)與密碼(資料庫連線密碼)。

 

點[確定]後傳回並“儲存”。

還是選擇我們剛才建立的“資料源”,可以直接在“麵包屑”中找到我們剛才建立的資料源。

在資料源屬性頁面中往下拖,到頁面底部看到有一個“安全性設定”,OK,將我們的資料源系結我們剛才建立的“J2C認證”吧。

 

[確定]並“儲存”後,可以在資料源的屬於頁裡點這個[測試連線]按鈕來進行我們的資料庫連線測試。

下麵是資料源測試成功的訊息提示,代表著我們的資料源已經測試成功。

在我們的資料源的屬性頁面右邊有一個“連線池屬性”

點“連線池屬性”,此處就是用來配置和最佳化我們的資料庫連線池,如何最佳化這邊就不多講了,因為已經在weblogic相關教程中詳細描述過了,大同小異,一通百通。

5.3 在WAS內佈署應用

一般我們使用ear格式在WAS內佈署我們的web應用,因此此處和weblogic, tomcat稍稍有點不一樣。

為此,我們做了一個ant指令碼用於打包我們的ear。

一個ear檔案的格式應該如下:

myEAR

|__ META-INF

|__application.xml

|__myWAR.war

可以看到,一個ear檔案:

包含一個META-INF目錄,在該目錄下會有一個application.xml檔案。

然後和META-INF目錄同級的地方會有一個.war檔案,這個war檔案就是標準的war格式的web應用。

5.3.1 application.xml檔案

 

 

         xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” version=”5″

 

         xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd”>

 

         cbbsEAR

 

         

 

                   

 

                            cbbs.war

 

                            /cbbs

 

                   

 

         

 

5.3.2 使用Ant打包

實際上我們的ant指令碼很簡單,它作瞭如下幾件事:

  • 用IBM WAS自帶的JDK即IBM JDK編譯我們的工程,確保我們的工程可以被我們的WAS能夠解析。

  • 將我們的工程打成.war檔案

 

           

 

         

將.war檔案與application.xml檔案打成.ear檔案

 

           

 

                   

 

                             

 

                   

 

           

 

         

下麵給出我們完整的Ant指令碼,該指令碼還使用到了一個外部的build.properties檔案用於設定一些常量。

build.properties

websphere.v7.home=D:/IBM/WebSphere/AppServer

 

project.home=D:/wspace

 

webAppName=cbbs

 

war.name=${webAppName}.war

 

ear.name=${webAppName}EAR.ear

 

eardescription.file=D:/wspace/${webAppName}/application.xml

build.xml

 

 

         

 

         

 

         

 

         

 

         

 

         

 

         

 

         

 

         

 

         

 

         

 

         

 

         

 

                   

 

  

 

                   

 

                   

 

                           

 

                   

 

                   

 

                           

 

                   

 

                   

 

                           

 

                   

 

                   

 

                           

 

                   

 

         

 

         

 

         

 

         

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

                   

 

         

 

  

 

         

 

         

 

                   

 

                   

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

                   

 

                           

 

                                     

 

                           

 

                   

 

         

 

         

 

                   

 

         

 

         

 

                   

 

                           

 

                                     

 

                           

 

                   

         

使用IBM WAS自帶的JDK對工程進行編譯

該套Ant指令碼其實還可以繼續最佳化,這個就留給大家了,關鍵是提供給了大家一個思路。

除了上邊所說的涉及到如何打war,如何打ear的核心指令碼外,關鍵在於這個“使用WAS自帶的IBM JDK”對工程進行編譯是很重要的,下麵是核心陳述句,註意紅色加組的部分。

 

                   

                   

 

                   

                           

                   

 

                   

                           

                   

 

                   

                           

                   

 

                   

 

                           

                   

 

 

executable=”${websphere.v7.home}\java\bin\javac” compiler=”javac1.6″ fork=”true”>

 

                           

 

5.3.3 佈署EAR

編譯完後該Ant指令碼會產生一個cbbsEAR.ear的檔案:

這個檔案就是我們用於佈署的EAR檔案了。

根據下麵的步驟一步步來佈署我們的ear吧。

點[安裝]

下一步

這步會比較慢,需要慢慢等一會。

下一步下一步到一直到下麵這個介面,請一定記住要把我們之前設定的“資料源”與工程中的jdbc的JNDI名進行系結啊,一定不要忘。

把“選擇”處的勾打上後,點選[瀏覽]按鈕,選擇我們之前建立的“DataSource”。

點[應用]按鈕後回到繼續佈署的介面。

將需要佈署的一些選項review一遍並確認無誤後點[完成]按鈕,開始佈署。

WAS佈署的進度介面

佈署完後不要忘記點紅圈處的“儲存”啊,要不一切白費。

佈署完後,我們的應用的應用程式狀態為“停止”狀態。

選擇我們的應用,點[啟動]按鈕

啟動後我們的應用程式應該為如下狀態

 

開啟一個ie,輸入: http://localhost:9080/cbbs

登入後進行一些操作,一切正常,WAS安裝設定成功。

結束今天的教程,明天的教程將會著重在使用IBM的HttpServer即IHS如何去結合IBM WebSphere Application Serve做整合。

系列


看完本文有收穫?請轉發分享給更多人

關註「ImportNew」,提升Java技能

贊(0)

分享創造快樂