<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 影響Java EE性能的因素

    時(shí)間:2024-10-05 14:36:08 J2EE培訓(xùn) 我要投稿
    • 相關(guān)推薦

    影響Java EE性能的因素

      JavaEE 是 J2EE的一個(gè)新的名稱,之所以改名,目的還是讓大家清楚J2EE只是Java企業(yè)應(yīng)用。下面小編為大家整理了關(guān)于影響Java EE性能的因素,希望能為你提供幫助:

      1.缺乏正確的容量規(guī)劃

      容量規(guī)劃是一個(gè)全面的和發(fā)展的過程標(biāo)準(zhǔn),預(yù)測(cè)當(dāng)前和未來的IT環(huán)境容量需求。制定合理的容量規(guī)劃不僅會(huì)確保和跟蹤當(dāng)前IT生產(chǎn)能力和穩(wěn)定性,同時(shí)也會(huì)確保新項(xiàng)目以最小的風(fēng)險(xiǎn)部署到現(xiàn)有的生產(chǎn)環(huán)境中。硬件、中間件、JVM、調(diào)整等在項(xiàng)目部署之前就應(yīng)該準(zhǔn)備好。

      2.Java EE中間件環(huán)境規(guī)范不足

      “沒有規(guī)矩,不成方圓”。第二個(gè)比較普遍的原因是Java EE中間件或者基礎(chǔ)架構(gòu)不規(guī)范。在項(xiàng)目初始,新平臺(tái)上面沒有制定合理的規(guī)范,導(dǎo)致系統(tǒng)穩(wěn)定性差。這會(huì)增加客戶成本,所以花時(shí)間去制定合理的Java EE中間件環(huán)境規(guī)范是必須的。這項(xiàng)工作應(yīng)與初始容量規(guī)劃迭代相結(jié)合。

      3.Java虛擬機(jī)垃圾回收過度

      各位對(duì)“java.lang.OutOfMemoryError”這個(gè)錯(cuò)誤信息是不是很熟悉呢?由于JVM的內(nèi)存空間過度消耗(Java堆、本機(jī)堆等)而拋出的異常。

      垃圾收集問題并不一定會(huì)表現(xiàn)為一個(gè)OOM條件,過度的垃圾收集可以理解成是JVM GC線程在短時(shí)間里進(jìn)行輕微或超量收集集合數(shù)據(jù)而導(dǎo)致的JVM暫停時(shí)間很長(zhǎng)和性能下降。可能有以下幾個(gè)原因:

      與JVM的負(fù)載量和應(yīng)用程序內(nèi)存占用量相比,Java堆可能選擇的太小。

      JVM GC策略使用不合理。

      應(yīng)用程序靜態(tài)或動(dòng)態(tài)內(nèi)存占用量太大,不適合在32位JVM上使用。

      JVM OldGen隨著時(shí)間推移,泄漏越來越嚴(yán)重,而GC在幾個(gè)小時(shí)或者幾天后才發(fā)現(xiàn)。

      JVM PermGen空間(只有HotSpot VM)或本機(jī)堆隨著時(shí)間推移會(huì)泄露是一個(gè)非常普遍的問題;OOM的錯(cuò)誤往往是觀察一段時(shí)間后,應(yīng)用程序進(jìn)行動(dòng)態(tài)調(diào)動(dòng)。

      YoungGen和OldGen的比例空間與你的應(yīng)用程序不匹配。

      Java堆在32位的VM上太大,導(dǎo)致本機(jī)堆溢出,具體可以表現(xiàn)為OOM試著去鏈接一個(gè)新的Java EE應(yīng)用程序、創(chuàng)建一個(gè)新的Java線程或者需要計(jì)算本地內(nèi)存分配任務(wù)。

      建議:

      觀察和深入理解JVM垃圾回收。啟動(dòng)GC,根據(jù)健康合理的評(píng)估來提供所有的數(shù)據(jù)。

      記住,GC方面的相關(guān)問題不會(huì)在開發(fā)中或者功能測(cè)試時(shí)發(fā)現(xiàn),它需要在多用戶高負(fù)載的測(cè)試環(huán)境下發(fā)現(xiàn)。

      4.與外部系統(tǒng)集成過多或過少

      導(dǎo)致Java EE性能差的第四個(gè)原因是高分布式系統(tǒng),典型案例是電信IT環(huán)境。在這個(gè)環(huán)境中,一個(gè)中間件領(lǐng)域(例如,服務(wù)總線)很少會(huì)做所有的工作,而僅僅是把一些業(yè) 務(wù)“委托”給其他部分,例如產(chǎn)品質(zhì)量,客戶資料和訂單管理,到其他Java EE中間件平臺(tái)或遺留系統(tǒng)中,如支持各種不同的負(fù)載類型和通信協(xié)議的大型機(jī)。

      這樣的外部系統(tǒng)調(diào)用意味著客戶端的Java EE應(yīng)用程序觸發(fā)創(chuàng)建或重用套接字鏈接從外部系統(tǒng)中讀寫數(shù)據(jù)。根據(jù)業(yè)務(wù)流程的實(shí)施和實(shí)現(xiàn)可以配置成同步調(diào)用或異步調(diào)用。需要注意的是,響應(yīng)時(shí)間會(huì)根據(jù)外部 系統(tǒng)的穩(wěn)定狀況進(jìn)行改變,所以通過適當(dāng)?shù)氖褂贸瑫r(shí)來保護(hù)Java EE應(yīng)用程序和中間件也是非常重要的。

      下面這3種情況是經(jīng)常出現(xiàn)問題和性能降低的地方:

      同步和相繼調(diào)用太多的外部系統(tǒng)。

      在Java EE客戶端應(yīng)用程序和外部系統(tǒng)之間鏈接超時(shí),使數(shù)據(jù)丟失或者值太高導(dǎo)致客戶端線程被卡住,從而導(dǎo)致多米拉效應(yīng)。

      超時(shí),但程序仍正常執(zhí)行,可是中間件不處理這種奇怪的路徑。

      最后,建議多進(jìn)行負(fù)面測(cè)試,這意味著需要“人為”創(chuàng)造產(chǎn)生這些問題的條件,用來測(cè)試應(yīng)用程序和中間件之間是如何處理外部系統(tǒng)錯(cuò)誤。

      5.缺乏適當(dāng)?shù)臄?shù)據(jù)庫SQL調(diào)優(yōu)和容量規(guī)劃

      大家可能會(huì)對(duì)這一個(gè)感到驚奇:數(shù)據(jù)庫問題。大多數(shù)Java EE企業(yè)系統(tǒng)是依賴關(guān)系型數(shù)據(jù)庫處理復(fù)雜的業(yè)務(wù)流程。一個(gè)基礎(chǔ)扎實(shí)穩(wěn)固的數(shù)據(jù)庫環(huán)境可以確保IT環(huán)境有規(guī)模的增長(zhǎng),來支持日益不斷擴(kuò)大的業(yè)務(wù)。

      在實(shí)際中,與數(shù)據(jù)庫相關(guān)的性能問題是很常見的。由于多數(shù)數(shù)據(jù)庫事務(wù)處理都是由JDBC數(shù)據(jù)源執(zhí)行的(包括關(guān)系持久化API,例如Hibernate)。而性能問題最初都會(huì)表現(xiàn)為線程阻塞。

      以下是我在10年的工作中,經(jīng)常出現(xiàn)的關(guān)于數(shù)據(jù)庫方面的問題(以O(shè)racle數(shù)據(jù)庫為例):

      孤立的,長(zhǎng)時(shí)間運(yùn)行的SQL。主要表現(xiàn)為線程阻塞、SQL沒有進(jìn)行優(yōu)化、缺少索引、非最佳的執(zhí)行計(jì)劃、返回大量數(shù)據(jù)集等等。

      表或行級(jí)數(shù)據(jù)鎖定。當(dāng)提交一個(gè)雙階段事務(wù)模型時(shí)(例如,臭名昭著的Oracle可疑事務(wù))。Java EE容器可能會(huì)留下一些未處理的事務(wù)等待最后的提交或回滾,留下的數(shù)據(jù)鎖能觸發(fā)性能問題,直到最后的鎖被移除。例如中間件斷電或者服務(wù)器崩潰都可能引起這些情況發(fā)生。

      缺乏合理規(guī)范的數(shù)據(jù)庫管理工具。例如Oracle里面的REDO logs,數(shù)據(jù)庫數(shù)據(jù)文件等。磁盤空間不足,日志文件不旋轉(zhuǎn)等都會(huì)觸發(fā)較大的性能問題和斷電情況。

      建議:

      合理的容量規(guī)劃,包括負(fù)載和性能測(cè)試都是必不可少的,優(yōu)化數(shù)據(jù)環(huán)境和及時(shí)發(fā)現(xiàn)問題。

      如果是使用Oracle數(shù)據(jù)庫,確保DBA團(tuán)隊(duì)定期審查AWR報(bào)告,尤其是在上下關(guān)聯(lián)的事件和根源分析過程中。

      使用JVM線程存儲(chǔ)和AWR報(bào)告查明SQL運(yùn)行緩慢的原因或者使用監(jiān)控工具來做。

      加強(qiáng)“操作”方面的數(shù)據(jù)庫環(huán)境(磁盤空間、數(shù)據(jù)文件、重做日志、表空間等)以適當(dāng)?shù)谋O(jiān)視和報(bào)警。如果不這么做,會(huì)讓客戶端IT環(huán)境出現(xiàn)較多的斷電情況和花許多時(shí)間進(jìn)行故障調(diào)修。

      6.特定應(yīng)用程序性能問題

      下面關(guān)注的是比較嚴(yán)重的Java EE應(yīng)用程序問題。關(guān)于特定應(yīng)用程序性能問題,總結(jié)了以下幾個(gè)點(diǎn):

      線程安全的代碼問題

      通信API缺少超時(shí)設(shè)置

      I/O、JDBC或者關(guān)系型API資源管理問題

      缺乏適當(dāng)?shù)臄?shù)據(jù)緩存

      數(shù)據(jù)緩存過度

      過多的日志記錄

      7.Java EE中間件調(diào)優(yōu)問題

      一般Java EE中間件都已經(jīng)夠用了,只是缺少必要的優(yōu)化。大多數(shù)Java EE容器都能有多種方案供你的應(yīng)用程序和業(yè)務(wù)進(jìn)程選擇。

      如果沒有進(jìn)行適當(dāng)?shù)恼{(diào)整和實(shí)踐,那么Java EE容器可能會(huì)處于一種消極的狀態(tài)。下圖是視圖和檢查列表示例:

      8.主動(dòng)監(jiān)控不足

      缺乏監(jiān)控,并不會(huì)帶來實(shí)際性能問題,但它會(huì)影響你對(duì)Java EE平臺(tái)性能和健康狀況的了解。最終,這個(gè)環(huán)境可以達(dá)到一個(gè)破發(fā)點(diǎn),這可能會(huì)暴露出一些缺陷和問題(JVM的內(nèi)存泄漏,等等)。

      以我的經(jīng)驗(yàn)來看,如果一開始不進(jìn)行監(jiān)控,而是運(yùn)行幾個(gè)月或者幾年后再進(jìn)行,平臺(tái)穩(wěn)定性將大打折扣。

      也就是說,改善現(xiàn)有的環(huán)境永遠(yuǎn)都不會(huì)晚。下面是一些建議:

      復(fù)查現(xiàn)有Java EE環(huán)境監(jiān)測(cè)能力和找到需改進(jìn)的地方。

      監(jiān)測(cè)方案應(yīng)該盡可能的覆蓋整個(gè)環(huán)境。

      監(jiān)控方案應(yīng)該符合容量規(guī)劃進(jìn)程。

      9.公共基礎(chǔ)設(shè)施硬件飽和

      這個(gè)問題經(jīng)常在有太多的Java EE中間件環(huán)境隨著JVM進(jìn)程被部署到現(xiàn)有硬件上面時(shí)看到。太多的JVM進(jìn)程對(duì)有限的物理CPU核心來說是一個(gè)真正的程序性能殺手。另外,隨著客戶端業(yè)務(wù)的增長(zhǎng),硬件方面也需要再次考慮。

      10.網(wǎng)絡(luò)延遲

      最后一個(gè)影響性能問題的是網(wǎng)絡(luò),網(wǎng)絡(luò)問題時(shí)不時(shí)的都會(huì)發(fā)生,如路由器、交換機(jī)和DNS服務(wù)器失敗。更常見的是在一個(gè)高度分散的IT環(huán)境中定期或間歇性延遲。下面圖片中的例子是一個(gè)位于同一區(qū)域的Weblogic集群通信與Oracle數(shù)據(jù)庫服務(wù)器之間的延遲。

      間歇或定期的延遲會(huì)觸發(fā)一些重要的性能問題,以不同的方式影響Java EE應(yīng)用程序。

      因?yàn)榇罅康膄etch迭代(網(wǎng)絡(luò)傳入和傳出),涉及大數(shù)據(jù)集的數(shù)據(jù)查詢問題的應(yīng)用會(huì)非常受網(wǎng)絡(luò)延遲的影響

      應(yīng)用程序在處理外部系統(tǒng)大數(shù)據(jù)負(fù)載(例如XML數(shù)據(jù))時(shí)也會(huì)很受網(wǎng)絡(luò)延遲的影響,會(huì)在發(fā)送和接收響應(yīng)時(shí)產(chǎn)生巨大的響應(yīng)間隔。

      Java EE容器復(fù)制過程(集群)也會(huì)受到影響,并且會(huì)讓故障轉(zhuǎn)移功能(如多播或單播數(shù)據(jù)包損失)處于風(fēng)險(xiǎn)中。

      JDBC行數(shù)據(jù)“預(yù)取”、XML數(shù)據(jù)壓縮和數(shù)據(jù)緩存可以減少網(wǎng)絡(luò)延遲。在設(shè)計(jì)一個(gè)新的網(wǎng)絡(luò)拓?fù)鋾r(shí),應(yīng)該仔細(xì)檢查這種網(wǎng)絡(luò)延遲問題。

    【影響Java EE性能的因素】相關(guān)文章:

    影響高錳鋼力學(xué)性能的幾個(gè)因素03-09

    高性能J2EE應(yīng)用的技巧03-22

    影響素描的因素03-02

    構(gòu)建高性能J2EE應(yīng)用的技巧03-20

    Java Web開發(fā)和J2EE的區(qū)別03-29

    績(jī)效管理的影響因素03-16

    影響績(jī)效管理的因素03-30

    影響寶寶睡眠的因素03-31

    影響狗狗毛發(fā)的因素06-24

    主站蜘蛛池模板: 日韩精品无码一区二区三区免费| 亚洲AV永久无码精品水牛影视| 日韩精品一区二区三区影院| 精品久久8x国产免费观看| 国产精品欧美久久久久无广告| 久久久久人妻一区精品性色av| 国产精品 综合 第五页| 久久久国产精品亚洲一区| 久久久精品国产亚洲成人满18免费网站 | 精品中文高清欧美| 国产精品毛片久久久久久久| 在线精品国产一区二区三区| 国产精品内射婷婷一级二| 久久精品成人免费网站| 国产乱码精品一区二区三区中文| 无夜精品久久久久久| 国产成人精品久久亚洲高清不卡 | 国产美女久久精品香蕉69| 在线观看国产精品日韩av| 精品91自产拍在线观看| 四虎影视884a精品国产四虎| 99re久久精品国产首页2020| 欧美午夜精品久久久久免费视 | 99精品欧美一区二区三区| 99精品国产在热久久| 久久er99热精品一区二区| 一区二区三区精品高清视频免费在线播放| 国产精品哟女在线观看| 亚洲欧洲国产精品你懂的| 久久精品一区二区| 500av导航大全精品| 国产精品人人爽人人做我的可爱| 中文字幕精品久久久久人妻| 女人高潮内射99精品| 精品久久久无码中文字幕| 国产精品自在欧美一区| 99久久精品国产一区二区三区| 久久精品嫩草影院| 日本欧美韩国日本精品| 99精品国产在热久久| 国产精品三级在线|