一次因生产事故与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%),建议增加内存。