网站设计制作厂家有哪些,网站为什么要seo,wordpress4.9.4 模版修改,建设部网站 光纤到户目录 1. 内存溢出和内存泄漏内存泄漏的常见场景解决内存溢出的思路1.发现问题 – Top命令2.发现问题 – VisualVM3.发现问题 – Arthas4.发现问题 – Prometheus Grafana5.发现问题 – 堆内存状况的对比 1. 内存溢出和内存泄漏
⚫ 内存泄漏memory leak在Java中如果不再使用一个对象但是该对象依然在GC ROOT的引用链上这个对象就不会被垃圾回收器回收这种情况就称之为内存泄漏。 ⚫ 内存泄漏绝大多数情况都是由堆内存泄漏引起的所以后续没有特别说明则讨论的都是堆内存泄漏
⚫ 少量的内存泄漏可以容忍但是如果发生持续的内存泄漏就像滚雪球雪球越滚越大不管有多大的内存迟早会被消耗完最终导致的结果就是内存溢出。但是产生内存溢出并不是只有内存泄漏这一种原因。
内存泄漏的常见场景
⚫ 内存泄漏导致溢出的常见场景是大型的Java后端应用中在处理用户的请求之后没有及时将用户的数据删 除。随着用户请求数量越来越多内存泄漏的对象占满了堆内存最终导致内存溢出。 ⚫ 这种产生的内存溢出会直接导致用户请求无法处理影响用户的正常使用。重启可以恢复应用使用但是在运行一段时间之后依然会出现内存溢出。 ⚫ 第二种常见场景是分布式任务调度系统如Elastic-job、Quartz等进行任务调度时被调度的Java应用在调度任务结束中出现了内存泄漏最终导致多次调度之后内存溢出。 ⚫ 这种产生的内存溢出会导致应用执行下次的调度任务执行。同样重启可以恢复应用使用但是在调度执行一段时间之后依然会出现内存溢出。
解决内存溢出的思路
解决内存溢出的步骤总共分为四个步骤其中前两个步骤是最核心的
1.发现问题 – Top命令
⚫ top命令是linux下用来查看系统信息的一个命令它提供给我们去实时地去查看系统的资源比如执行时的进程、线程和系统参数等信息。 ⚫ 进程使用的内存为RES常驻内存- SHR共享内存
2.发现问题 – VisualVM
⚫ VisualVM是多功能合一的Java故障排除工具并且他是一款可视化工具整合了 命令行 JDK 工具和轻量级分析功能功能非常强大。 ⚫ 这款软件在Oracle JDK 6~8 中发布但是在 Oracle JDK 9 之后不在 JDK安装目录下需要单独下载。下载地址https://visualvm.github.io/
3.发现问题 – Arthas
⚫ Arthas 是一款线上监控诊断产品通过全局视角实时查看应用 load、内存、gc、线程的状态信息并能在不修改应用代码的情况下对业务问题进行诊断包括查看方法调用的出入参、异常监测方法执行耗时类加载信息等大大提升线上问题排查效率。
4.发现问题 – Prometheus Grafana
⚫ PrometheusGrafana是企业中运维常用的监控方案其Prometheus用来采集系统或者应用的相关数据同时具备告警功能。Grafana可以将Prometheus采集到的数据以可视化的方式进行展示。 ⚫ Java程序员要学会如何读懂Grafana展示的Java虚拟机相关的参数
5.发现问题 – 堆内存状况的对比