溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

影響Java EE性能的十大問題分別是什么

發(fā)布時間:2021-10-29 17:10:21 來源:億速云 閱讀:124 作者:柒染 欄目:編程語言

影響Java EE性能的十大問題分別是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

下面將和大家分享一下常見的10個影響Java EE性能問題。

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

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

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

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

影響Java EE性能的十大問題分別是什么

3.Java虛擬機垃圾回收過度

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

影響Java EE性能的十大問題分別是什么

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

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

  2. JVM GC策略使用不合理。

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

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

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

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

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

建議:

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

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

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

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

影響Java EE性能的十大問題分別是什么

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

影響Java EE性能的十大問題分別是什么

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

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

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

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

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

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

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

影響Java EE性能的十大問題分別是什么

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

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

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

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

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

建議:

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

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

  3. 使用JVM線程存儲和AWR報告查明SQL運行緩慢的原因或者使用監(jiān)控工具來做。

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

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

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

  1. 線程安全的代碼問題

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

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

  4. 缺乏適當?shù)臄?shù)據(jù)緩存

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

  6. 過多的日志記錄

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

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

如果沒有進行適當?shù)恼{(diào)整和實踐,那么Java EE容器可能會處于一種消極的狀態(tài)。

下圖是視圖和檢查列表示例:

影響Java EE性能的十大問題分別是什么

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

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

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

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

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

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

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

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

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

影響Java EE性能的十大問題分別是什么

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

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

影響Java EE性能的十大問題分別是什么

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

  1. 因為大量的fetch迭代(網(wǎng)絡(luò)傳入和傳出),涉及大數(shù)據(jù)集的數(shù)據(jù)查詢問題的應(yīng)用會非常受網(wǎng)絡(luò)延遲的影響

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

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

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

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI