一次因生產事故與chatGpt的對話

中華發表於2023-03-29

一次因生產事故與chatGpt的對話

前言:生產出現了一個記憶體溢位的事故,記錄錯誤資訊。錯誤日誌如下
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) ~[spring-webmvc-5.2.11.RELEASE.jar!/:5.2.11.RELEASE]
	..........

一問答

二問答

三問答

四問答

五問答

六問答

七問答

八問答

九問答

十問答

知識小結:

1. Java執行引數

堆 :是JVM 執行時一塊記憶體區域,用於儲存建立的物件和陣列。當需要建立新物件時,JVM 會在堆空間中分配一塊連續的空閒區域,用於儲存該物件。

  1. -Xms :用於指定堆空間的初始值
  2. -Xmx :用於指定堆空間的最大值,過小容易出現OutOfMemoryError,
  3. -Xmn :設定新生代堆的大小,在整個堆大小(包括新生代堆和老年代堆)已經被設定的情況下。它的預設值通常是整個堆大小的 1/4 或者 1/8。
  4. -XX:+UseG1GC :使用 G1 垃圾回收器。G1 垃圾回收器是 Java 7 中引入的一種新的垃圾回收器,適用於大記憶體應用程式,並且能夠在較短的停頓時間內處理大型堆。
2. 監控與計算伺服器記憶體
  1. free 靜態顯示記憶體使用情況,可直接用於計算記憶體使用率。

  2. top 可動態監控,且可檢視某些程式的使用情況

​ 3. 記憶體使用率的計算公式,若記憶體使用率超過 70%,就容易發生記憶體溢位

Memory Usage = (MemTotal - MemFree - Buffers - Cached) / MemTotal * 100
3. 事故解決方案
  1. 加大最大堆值Xmx ,原是512m 後增之1024m。
  2. 記憶體使用率超過 70%(約為75%),建議增加記憶體。

相關文章