当你遇到内存告警百分之80以上,你很想去找到具体的问题,但奈何没有思路,这时怎么办?你可以不断地给自己提问题,从而找到问题的答案。

下方给你一个排查思路或者是学习思路:

1)内存告警的是哪个服务?

2)这个服务有没有什么日志可以让你获取什么信息?

3)具体看什么日志呢?业务系统打印的业务数据日志?No,是内存使用相关的日志。

4)内存使用日志从哪里来呢?

5)内存日志怎么看?具体代表什么意思?

6)内存日志通过什么信息证明内存溢出?

7)内存日志通过什么信息证明仅仅只是配置问题,调整配置即可解决问题?

8)还有什么信息可以继续排查问题呢?

(PS:如果你还是觉得很抽象,那么这时你可以尝试谷歌找一下别人都是如何分析内存溢出的案例,了解他使用了什么工具,怎么做的,这时你就知道需要了解什么工具了。

又或者你的英文很厉害,直接查看相关语言的指导手册。)

案例分析
背景:有一天,公司的线上服务持续告警内存使用80%以上。这时我想找到具体的原因。这时我是怎么做的呢?第一步:登录服务器,通过kubectl查看对应服务的资源配置及使用情况,确认的确告警无误,开始排查。查看当前服务的资源分配情况:kubectl describe -n biz pod <pod-name>查看当前服务的资源使用情况:kubectl top -n biz pod <pod-name>第二步:当前服务的编程语言是java,那么java语言的内存大多数是由JVM管理的,那么这时是不是得了解JVM呢?通过Java程序的jvm配置打印GC日志。参考资料:https://zhuanlan.zhihu.com/p/38056939https://www.bilibili.com/video/BV1gF411L7pT?p=2&spm_id_from=pageDriver&vd_source=0355be618d2dfc3b710fd6309dd4f94f第三步:这时就可以获取GC日志进行分析了;参考资料:https://blog.csdn.net/weixin_39195030/article/details/118553127https://juejin.cn/post/6844903861556084744第四步:除了日志,我还通过使用Java自带的一些工具将Java程序的内存实际占用情况倒了出来,使用MAT工具分析内存占用情况。参考资料:https://blog.csdn.net/goldenfish1919/article/details/94378369https://www.bilibili.com/video/BV1q84y1F7kJ?spm_id_from=333.337.search-card.all.click

那么我们来看具体的数据分析吧。

当时的环境配置:

JDK是版本8;

JVM新生代和老年代的内存占比默认是1:2;

使用的是CMS垃圾回收机制。

这时你先看两个图片:

图片1:通过jstat导出的程序进程内存使用情况,由MAT分析展示

图片2:当时告警服务的日志

看完这两个图,不知道你们是否已经找到了问题的原因?

首先分析图一:

先说明一个前提:导出某个Java进程的内存占用数据时,会进行一次fullGC;

通过MAT工具的分析,我们可以发现进程的内存使用只有49.7MB,这说明什么呢?

这说明内存使用正常,因为通过fullGC把老年代的垃圾进行全部回收了,剩下有用的对象占用具体的内存。

再来分析图二:

通过图二的“full 1”可以得到,服务从开始运行到现在也只进行了一次fullGC,也就是说明服务没有频繁进行fullGC,那么也就是说垃圾回收得很顺利,那么问题来了,为什么还会频繁告警呢?为什么呢?

我通过咨询开发获得了这样的信息:

服务接收到的请求量突增,导致新生代的内存不够用,使得一些本来可以再过一段时间就可以在新生代被清理掉的对象来到了老年代区域,这时服务一直没有达到fullGC的条件,因此老年代的内存占用一直很高,导致整体的内存占用高,从而引发的告警。

那么该如何解决呢?

既然不是内存泄漏的问题,那么暂时不需要优化代码。

既然是新生代的内存快速占满使得有对象逃逸到老年代,那么是不是就可以调整新生代和老年代的配比,也许能解决问题呢?

结论:

我们最终通过将新生代和老年代的配比调整为:1比1,直至一个月过去了,也再没发生告警。

PS:虽然新生代、老年代的配比推荐是:1比2,但是具体场景具体分析。

最后:希望这篇文章能帮助到你,以及该分析思路能带领你越走越远。

【性能测试之问题分析】遇到内存告警百分之80以上的排查逻辑及实例分析(关键字:JVM、JAVA)相关推荐

  1. android内存占用分析,Android App性能评测分析-内存篇

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查问题. 1 ...

  2. 分析c++内存泄露(使用VS 性能探查器)

    这里写目录标题 内存泄露 VS 性能探测器 教程 分析步骤 不带调试器 带调试器 写在后面 内存泄露 最近项目中发现了比较多的内存泄露的问题. 我在这里给大家介绍windows平台下 简单说明下如何使 ...

  3. 如何分析PG数据库内存告警

    PG数据库遇到内存问题要立即进行分析的场景并不多,因为大多数PG数据库的内存使用率过高的报警并不意味着内存使用情况异常,内存真的不够用了.因为PG数据库是使用DOUBLE BUFFERING机制的,大 ...

  4. 性能测试之cpu 分析

    cpu 架构  --中央处理器 运算器: 真正进行计算的单元 控制器: leader 寄存器: 存储 指令.数据.地址 时钟 控制程序运行时长 内存 程序代码.网络数据,外部数据进入cpu的桥梁,内存 ...

  5. 性能测试之Jmeter元件

    性能测试之Jmeter元件 1.性能测试的本质 性能测试的定义 基于协议模拟用户发请求,对服务器形成一定的负载,来测试服务器的性能指标是否满足用户(产品&公司)的需求. 关注点 时间性能 空间 ...

  6. mysql性能瓶颈分析和内存占用高的优化

    微信公众号:我其实目前没有耶 我是一个互联网公司的螺丝钉; 魔术师耿 mysql服务器性能瓶颈分析和内存优化 前言 开发阶段,对项目中mysql使用在代码层面已经做了最大努力的优化: 大表减少关联查询 ...

  7. 性能测试之细节决定成败

    性能测试之细节决定成败 汪中求先生的<细节决定成败>一书早就读过,但是深入理解的话,还是要有经验和教训来支撑,前不久接手一个性能测试工作,本来1天时间就能搞定的事情,结果到第3天才找到瓶颈 ...

  8. jstat 内存泄漏_基于Java内存dump文件分析解决内存泄漏问题

    概述 本文介绍一次解决现场java内存泄漏问题的经过,希望能提供后续遇到类似情况的读者一点思路. 生产环境发现的问题问题 生产环境运维人员反馈,服务器(windows系统)卡死,相关的服务都运行异常, ...

  9. 报警服务器物理内存,从内存告警谈ESXi主机内存管理——内存构成

    在<如何处理ESXi主机的黄色告警>一文中我们提到了在没有冗余的管理网络或启用SSH的情况下,ESXi主机图标右下方将会出现黄色的告警.除了上述配置导致告警之外,另一种常见的告警就是ESX ...

最新文章

  1. ORM表之间的多对多处理
  2. React,Redux,React-redux的错综复杂关系
  3. python字频统计软件_python结巴分词以及词频统计实例
  4. jquery技巧总结-转载
  5. 201452202014520920145309信息安全系统设计基础实验报告(1)
  6. Matlab线性/非线性规划优化算法(2)
  7. Java枚举(Enum)类型的基本介绍与原理探求
  8. java正则替换数字_Java 正则表达式,替换图片名称,替换数字,和谐用语,复制文件...
  9. 响应头中content-type常用的类型有哪些?
  10. 求解偏微分方程开源有限元软件deal.II学习--Step 4
  11. NB朴素贝叶斯进行中文文本分类
  12. 服务器u盘一键安装系统,一键Ghost U盘版安装使用图文教程
  13. 手把手教你安装破解IAR For ARM 6.3
  14. 发票专用驱动sjz_税务局紧急提醒!10月31日前,不能领票,不能勾选!11月1日后,发票开具将大不同!...
  15. 为什么房价不能跌,房租必须涨
  16. 高德地图驾车导航使用
  17. 科研绘图(Matplotlib.pyplot)
  18. vue3最简单的在线md编辑器
  19. ArcGIS 制图搭配:文字、比例尺等大小
  20. iphone型号表_历代iphone上市时间表(iphone所有型号上市顺序)

热门文章

  1. Unity资源处理机制(Assets/WWW/AssetBundle/...)读取和加载资源方式详解
  2. 暴力递归转动态规划----以货币数问题展开
  3. threejs制作3d模型展示网页
  4. 《linux硬盘安装方法 》——引自 http://blog.csdn.net/rusi_lsk/
  5. 关于gluster分布式哈希研究
  6. 向量数据库极简教程 | A Gentle Introduction to Vector Databases
  7. 计算机常用英语词汇及读音,100个最常用英文单词的完美发音,so easy!
  8. 在微信小程序中制作的登录功能一定要考虑不同的入口问题
  9. kafka 创建 topic 报错 Error: Exception thrown by the agent : java.rmi.server.ExportException: Port alrea
  10. 应用系统报错:com.highgo.jdbc.util.PSQLException:bad value for long