首页 > 自考资讯 > 自考知识

edas部署,eda使用

头条共创 2024-06-27

更多文章请关注我们的云计算频道:https://yq.aliyun.com/cloud

1b820002c19d9506ad7d~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720084903&x-signature=xHEgkuLyi5OBWSejkbI6p1j2grk%3D

什么是OOM?

我想很多“程序员”都知道OOM异常对我们来说很常见。 “java.lang.OutOfMemoryError”是应用开发中比较常见的异常,主要分为三类:

1. OutOfMemoryError:永久代空间

2.OutOfMemoryError:Java堆空间

3. OutOfMemoryError:无法创建新的本机线程

OOM的危害

OOM 情况通常会导致以下情况:

1、应用服务异常

2. 线程异常

3、程序崩溃

如果你看看诸如此类的未知问题,我想你就会明白“OOM”的“可怕”了。

如何排查OOM问题

出现这个OOM问题,应该如何分析原因?还是直接看代码或者调整工程结构?我认为在很多情况下这种方法是浪费的。那么如何快速解决和识别这些类型的问题呢?

模拟异常场景

为了清楚地解释整个故障排除过程,我们将创建一个模拟OOM 场景的OutOfMemoryError 测试代码。

Servlet测试代码:

@Overridepublic class TestCase { public int id; public String[] array=new String[1024];web.xml 映射路径:

servlet 获取转储文件

转储文件是进程的内存映像,可以通过调试器将程序执行状态保存到转储文件中。这是开发人员发现JVM问题的“利器”。

方法一:edas控制台部署添加参数

要通过edas控制台部署并启动应用程序,请指定jvm参数,并在控制台中指定最大堆大小和初始堆大小为100m(请注意,当前设置的值仅用于测试目的)。

此外,您还可以自定义一些参数,例如:

-XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError XX:HeapDumpPath=/home/admin/dump/控制台设置:

1b800005c6e63fe5f5da~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720084903&x-signature=kSQ4%2FB7ms%2BLTr0bt%2FCvAaEsWQWw%3D

1b8100042954f590de96~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720084903&x-signature=A%2FHYxFan224h29IBY%2FkqRrdFV%2Bs%3D

PrintGCDetails 打印gc 日志。 XX:HeapDumpPath 指定在出现OOM 问题时在/home/admin/dump/中生成转储文件。

方法二:通过jmap获取

jmap是jdk自带的一个JVM发现工具。要通过jmap获取堆栈溢出转储文件,将代码更改如下:

@Override 访问测试代码条目并在应用程序服务器上运行它。

您可以使用jmap -dump:live,format=b,file=heap.bin pid 获取heap.bin 文件。

测试堆栈溢出

以管理员用户身份登录服务器,找到Tomcat 进程ID,运行./jstat -gcutil {pid} {时间间隔} 并观察gc 运行情况。

1b81000429551820c4b2~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720084903&x-signature=my7xd2ObP%2BoddNCXqC7DGbgDJrU%3D

可见目前的YGC和FGC并不频繁,属于正常现象。

访问测试路径:http://{ip}:port/path/heap.htm

执行完成后,eden区和old区都瞬间被填满,可以看到短时间内多次出现FGC:

1b870002a52e2ee939c1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720084903&x-signature=f8aXq9WaaNjfKyCuzDiDAXIHo1c%3D

MAT记忆分析

mat是一个快速分析Java内存的工具,mat官网

在服务器上,可以在前面指定的路径下找到方法一生成的hprof文件:/home/admin/dump/。方法二:下载生成的heap.bin文件后,在MAT内存分析软件中打开。

1b840002b4a84c4bfdf1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720084903&x-signature=zdbhJ4qx7gkPUWnPEoq8m6dZJuc%3D

1b850002a5684a09b724~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720084903&x-signature=%2BjLH%2FTw3JfooPcrVmQd1ZowYMig%3D

垫子分析后,您可以立即得到分析报告。这表明堆栈溢出是由“HeapOutOfMemory.doGet”代码条目引起的。事实证明,我的代码中有一个无限循环,不断创建新类,导致堆栈溢出。 接下来,你需要知道如何修改代码。

小结

如果您遇到任何jvm 问题,请不要惊慌,这是一个潜在的技术问题。除了中描述的mat 内存分析工具之外,还有许多方法可以轻松识别原因。 JDK 本身还有许多其他小工具可供使用,例如jconsole、jmap、jstat、jinfo 和jvisualvm。充分利用这些小工具,下次遇到类似问题时,您将能够轻松使用它。

版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。

猜你喜欢