一次因生產事故與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 會在堆空間中分配一塊連續的空閒區域,用於儲存該物件。
- -Xms :用於指定堆空間的初始值
- -Xmx :用於指定堆空間的最大值,過小容易出現OutOfMemoryError,
- -Xmn :設定新生代堆的大小,在整個堆大小(包括新生代堆和老年代堆)已經被設定的情況下。它的預設值通常是整個堆大小的 1/4 或者 1/8。
- -XX:+UseG1GC :使用 G1 垃圾回收器。G1 垃圾回收器是 Java 7 中引入的一種新的垃圾回收器,適用於大記憶體應用程式,並且能夠在較短的停頓時間內處理大型堆。
2. 監控與計算伺服器記憶體
-
free 靜態顯示記憶體使用情況,可直接用於計算記憶體使用率。
-
top 可動態監控,且可檢視某些程式的使用情況
3. 記憶體使用率的計算公式,若記憶體使用率超過 70%,就容易發生記憶體溢位
Memory Usage = (MemTotal - MemFree - Buffers - Cached) / MemTotal * 100
3. 事故解決方案
- 加大最大堆值Xmx ,原是512m 後增之1024m。
- 記憶體使用率超過 70%(約為75%),建議增加記憶體。