心的方向

          新的征途......
          posts - 75,comments - 19,trackbacks - 0
          作者tag:jvm?算法?應(yīng)用服務(wù)器?j2ee?大小?

          ????????性能問(wèn)題的最明顯表現(xiàn)是網(wǎng)頁(yè)的響應(yīng)時(shí)間變慢。在J2EE系統(tǒng)中,經(jīng)常體現(xiàn)有下面更為基本的癥狀:

        1. 應(yīng)用服務(wù)器資源的使用情況
        2. JVM堆的使用情況
        3. 系統(tǒng)資源的使用情況
        4. 數(shù)據(jù)庫(kù)資源的使用情況
        5. 網(wǎng)絡(luò)活動(dòng)

          ????????這些現(xiàn)象表明J2EE應(yīng)用依賴很多外部資源,并且是運(yùn)行在一個(gè)層次化的執(zhí)行模式的環(huán)境中:

          ????????由于Java虛擬機(jī)和應(yīng)用服務(wù)器掩蓋了操作系統(tǒng)和硬件的特性,所以在設(shè)計(jì)軟件系統(tǒng)時(shí),架構(gòu)工程師更應(yīng)該深刻理解整個(gè)操作環(huán)境。

          ????????在設(shè)計(jì)軟件系統(tǒng)時(shí),架構(gòu)工程師應(yīng)把性能和可擴(kuò)展性放在首位,然后開(kāi)始尋找容易解決的問(wèn)題,反應(yīng)時(shí)間緩慢通常的原因是訪問(wèn)數(shù)據(jù)庫(kù)效率低和過(guò)多地調(diào)用遠(yuǎn)程對(duì)象和方法。接下來(lái),架構(gòu)工程師可繼續(xù)尋找不明顯的原因,例如算法的累積影響和不必要的開(kāi)銷。

          ????????現(xiàn)在市場(chǎng)上的各個(gè)J2EE應(yīng)用服務(wù)器有很多配置項(xiàng)目。這里只簡(jiǎn)單介紹一些常見(jiàn)的性能優(yōu)化配置項(xiàng)目。

          ????????很多應(yīng)用服務(wù)器都有一些與J2EE規(guī)范有關(guān)的操作系統(tǒng)配置項(xiàng)目或非標(biāo)準(zhǔn)的特性,這可以提高系統(tǒng)性能。應(yīng)該化時(shí)間來(lái)理解這些性能配置。

          Java虛擬機(jī)堆和垃圾回收設(shè)置

          ????????任何Java應(yīng)用的性能調(diào)整基礎(chǔ)都涉及到堆的大小和垃圾回收設(shè)置。(這里主要討論Sun HotSpor JVM).

          ????????堆可分為三代,年輕的(新的),年老的和持久的。Hotspot JVM的內(nèi)存基本配置包括最大堆大小,初始堆大小和年輕一代堆的大小。當(dāng)配置最大堆大小時(shí)可參考下面一些指導(dǎo):

        6. 最大大小應(yīng)小于物理內(nèi)存,避免虛存的頁(yè)面調(diào)度。
        7. 需要減去其他進(jìn)程使用的內(nèi)存
        8. 在負(fù)載測(cè)試時(shí)進(jìn)行優(yōu)化

          ????????注意不要將最大堆大小設(shè)置得過(guò)大。堆越大,內(nèi)存中保存的對(duì)象越多。內(nèi)存中對(duì)象越多,回收過(guò)程時(shí)間越長(zhǎng)。

          ????????配置初試堆大小的一般性策略包括:

          ?

        9. 將初始大小設(shè)置為最大堆大小
        10. 將初始大小設(shè)置為最大堆大小的1/4到1/2

          ????????對(duì)于年輕一代堆大小,Sun 推薦是設(shè)置為最大堆大小的1/3。

          ????????也可以選擇不同的垃圾回收算法。首先是增量垃圾回收。該算法的意思是減少單個(gè)對(duì)象回收停頓時(shí)間,這樣的結(jié)果是整體回收性能的下降。該算法將相互引用的對(duì)象分組,然后嘗試按組回收。嘗試回收的部分越小,回收處理的時(shí)間往往會(huì)越少。

          ????????1.4.1版的HotSpot JVM增加了兩個(gè)垃圾回收算法:并行算法和并發(fā)算法。

          ????????在年輕一代堆中實(shí)現(xiàn)了并行算法。在多處理器的機(jī)器上,這種回收算法使用了多線程來(lái)提高性能。雖然這個(gè)算法會(huì)暫停所有的應(yīng)用線程,但是由于利用了多個(gè)CPU使得回收時(shí)間非常快。在年輕一代堆中,該算法顯著地減少了回收帶來(lái)的停頓。

          ????????在年老一代堆中實(shí)現(xiàn)了并發(fā)算法。在應(yīng)用中最大限度地執(zhí)行并發(fā)。回收過(guò)程分為4個(gè)階段,覆蓋了可回收對(duì)象的標(biāo)記和清除操作。前兩個(gè)過(guò)程會(huì)暫停應(yīng)用線程,后兩階段可與應(yīng)用并發(fā)執(zhí)行。并發(fā)垃圾回收算法的"最大限度并發(fā)"特點(diǎn)可以使JVM利用更大的堆和多個(gè)CPU。因此應(yīng)關(guān)注由于采用缺省的mark-compact(標(biāo)記-壓縮)和stop-the-world(停頓所有處理)等垃圾回收算法所帶來(lái)的延遲和吞吐量問(wèn)題。

          處理線程

          ????????J2EE應(yīng)用服務(wù)器是多線程的應(yīng)用。應(yīng)用服務(wù)器的線程是一種資源池,處理請(qǐng)求和和應(yīng)用服務(wù)器的內(nèi)部功能等任務(wù)共享這些資源。

          ????????很多應(yīng)用服務(wù)器允許為特定的任務(wù)或應(yīng)用配置不同大小的線程池。通常需要增加這些線程池的大小以滿足應(yīng)用負(fù)載的需要。

          ????????架構(gòu)工程師應(yīng)該避免將線程池大小設(shè)置過(guò)大,這是因?yàn)闀?huì)增加上下文交換的次數(shù),從而降低應(yīng)用的性能。線程池的大小通常應(yīng)該能最大利用機(jī)器上的CPU,同時(shí)又不能使CPU過(guò)載。

          EJB配置項(xiàng)目

          ???????? 在應(yīng)用服務(wù)器中,很多不同類型的EJB是以資源池的方式實(shí)現(xiàn)的。通常這些池大小和初始Bean的數(shù)量會(huì)明顯影響應(yīng)用的性能。

          ????????架構(gòu)工程師應(yīng)該避免將這些池大小設(shè)置的過(guò)大,這樣會(huì)導(dǎo)致不必要地消耗JVM和操作系統(tǒng)內(nèi)存。另外,將初始Bean數(shù)量設(shè)置過(guò)高會(huì)使得應(yīng)用服務(wù)器的啟動(dòng)時(shí)間長(zhǎng)的難以接受。

          ????????在應(yīng)用服務(wù)器中,緩存很多不同類型的EJB。緩存大小和超時(shí)設(shè)置通常也會(huì)對(duì)應(yīng)用性能帶來(lái)顯著影響。

          ???????? 架構(gòu)工程師應(yīng)該避免將緩寸大小設(shè)置過(guò)大,這同樣會(huì)不必要地消耗大量JVM和操作系統(tǒng)內(nèi)存。此外,應(yīng)避免設(shè)置過(guò)長(zhǎng)的超時(shí)--例如當(dāng)EJB不用時(shí),仍被緩存---,這也會(huì)導(dǎo)致不必要地消耗大量?jī)?nèi)存。

          數(shù)據(jù)庫(kù)配置項(xiàng)目

          ????????J2EE規(guī)范要求應(yīng)用服務(wù)器廠商必須提供數(shù)據(jù)庫(kù)連接資源池功能。通常增加數(shù)據(jù)庫(kù)連接池的大小會(huì)提高性能。架構(gòu)工程師應(yīng)該考慮不同類型的SQL操作(例如事務(wù)型和批處理型)應(yīng)使用不同的連接池。如果一個(gè)消息Bean執(zhí)行批處理操作,那么應(yīng)該為此另創(chuàng)建一個(gè)連接池,而不要與事務(wù)型操作使用同一個(gè)連接池。

          ????????很多J2EE應(yīng)用服務(wù)器提供了Prepared Statement 的緩存功能。創(chuàng)建Prepared Statement是很耗費(fèi)資源的。在事務(wù)型的J2EE應(yīng)用中通常執(zhí)行很多同樣的SQL語(yǔ)句,只是參數(shù)不同而已。所以在應(yīng)用中應(yīng)發(fā)揮數(shù)據(jù)庫(kù)配置項(xiàng)目的作用,盡量使用Prepared Statement。?

          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1527474


        11. 文章來(lái)源:http://21958978.spaces.live.com/Blog/cns!A7DF246804AD47BB!207.entry
          posted on 2007-03-31 10:49 阿偉 閱讀(215) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE
          主站蜘蛛池模板: 蒙自县| 阳谷县| 喀什市| 百色市| 黄浦区| 辽阳市| 武邑县| 涟水县| 宾阳县| 卓资县| 青州市| 永顺县| 桂东县| 广东省| 无棣县| 河源市| 合山市| 汕尾市| 南阳市| 扬州市| 蒙城县| 平泉县| 乌拉特中旗| 天等县| 海阳市| 台南市| 河池市| 额济纳旗| 普兰县| 江门市| 东光县| 德保县| 天气| 梅州市| 游戏| 塔河县| 佛山市| 犍为县| 苗栗县| 杭锦后旗| 康马县|