性能測試中的常見異常分析(轉載整理)

堆內存溢出

java.lang.OutOfMemoryError: Java heap space
緣由:java堆內存不夠或者程序中有死循環;
解決:若是是java堆內存不夠,須要經過調整JVM下面的配置來解決:
  < jvm-arg>-Xms3062m < / jvm-arg>
  < jvm-arg>-Xmx3062m < / jvm-arg>
 java


java.lang.OutOfMemoryError: GC overhead limit exceeded
緣由:內存不足,GC爲了釋放很小空間而佔用大量時間時拋出異常
解決:
  一、查看系統是否有使用大內存的代碼或死循環;
  二、經過添加JVM配置,來限制使用內存:
  < jvm-arg>-XX:-UseGCOverheadLimit< /jvm-arg>
  
java.lang.OutOfMemoryError: PermGen space
緣由:P區內存不夠數組

解決:可經過調整JVM的配置:
  < jvm-arg>-XX:MaxPermSize=128m< /jvm-arg>
  < jvm-arg>-XXermSize=128m< /jvm-arg> jvm

  JVM的Perm區主要用於存放Class和Meta信息的,Class在被Loader時就會被放到老年代,GC在主程序運行期間不會對老年代進行清理,默認是64M大小,當程序須要加載的對象比較多時,超過64M就會報這部份內存溢出了,須要加大內存分配,通常128m足夠
  
java.lang.OutOfMemoryError: Direct buffer memory

優化

緣由:棧溢出,方法調用層次過多或者線程棧過小。
解決:優化程序設計,減小方法調用層次;調整-Xss參數增長線程棧大小。spa

調整-XX:MaxDirectMemorySize= 參數 線程

< jvm-arg>-XX:MaxDirectMemorySize=128m< /jvm-arg> 設計

java.lang.OutOfMemoryError:PermGen space對象


Java異常


Throwable
Throwable是 Java 語言中全部錯誤或異常的超類。
Throwable包含兩個子類: Error 和 Exception 。它們指示發生了異常狀況
Throwable包含了其線程建立時線程執行堆棧的快照,它提供了printStackTrace()等接口用於獲取堆棧跟蹤數據等信息接口


Exception
Exception及其子類是 Throwable 的一種形式,它指出了合理的應用程序想要捕獲的條件內存


RuntimeException
RuntimeException是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。

Error
和Exception同樣, Error也是Throwable的子類。 它用於指示合理的應用程序不該該試圖捕獲的嚴重問題,大多數這樣的錯誤都是異常條件。

Java將可拋出(Throwable)的結構分爲三種類型:

  • 被檢查的異常(Checked Exception),
  • 運行時異常(RuntimeException)
  • 錯誤(Error)


(01) 運行時異常
定義 : RuntimeException及其子類都被稱爲運行時異常
特色 : Java編譯器不會檢查它。 也就是說,當程序中可能出現這類異常時,假若既」沒有經過throws聲明拋出它」,也」沒有用try-catch語句捕獲它」,仍是會編譯經過。例如,除數爲零時產生的ArithmeticException異常,數組越界時產生的IndexOutOfBoundsException異常,fail-fail機制產生的ConcurrentModificationException異常等,都屬於運行時異常。

(02) 被檢查的異常
定義 : Exception類自己,以及Exception的子類中除了」運行時異常」以外的其它子類都屬於被檢查異常。
特色 : Java編譯器會檢查它。 此類異常,要麼經過throws進行聲明拋出,要麼經過try-catch進行捕獲處理,不然不能經過編譯。例如,CloneNotSupportedException就屬於被檢查異常。當經過clone()接口去克隆一個對象,而該對象對應的類沒有實現Cloneable接口,就會拋出CloneNotSupportedException異常。
被檢查異常一般都是能夠恢復的


(03) 錯誤
定義 : Error類及其子類
特色 : 和運行時異常同樣,編譯器也不會對錯誤進行檢查。
當資源不足、約束失敗、或是其它程序沒法繼續運行的條件發生時,就產生錯誤。程序自己沒法修復這些錯誤的。例如,VirtualMachineError就屬於錯誤。

相關文章
相關標籤/搜索