从缺陷到创新:质量保障的新视角

京东云开发者
• 阅读 253

1.背景:

最近一段时间研发大佬们在积极的治理告警,经过一段时间的治理,现在告警情况已经有了很大的改观,但难免还有漏网之鱼;具体我们可以以下边一个例子来看:
从缺陷到创新:质量保障的新视角
这是一个生产的UMP告警,通过这个告警我们发现XXX这个应用的堆内存使用率为90.18%,超过了设置的告警阈值85%,所以产生了这样的一个告警;那什么是堆内存呢?

1.1.Java堆内存

Java堆内存的定义

Java堆内存是JVM内存的一部分,专门用于动态分配对象和数组。它是一个运行时数据区,从JVM启动到JVM关闭,堆内存一直存在。堆内存的大小可以通过JVM启动参数进行调整,如-Xms(表示java虚拟机堆区内存初始内存分配的大小-Xmx(表示java虚拟机堆区内存可被分配的最大上限

Java堆内存的特点

动态分配:Java堆内存允许在运行时动态分配和释放对象。

自动管理:Java具有自动垃圾回收机制(Garbage Collection, GC),自动回收不再使用的对象,防止内存泄漏。

全局访问:堆内存中的对象可以被程序中的任何部分访问,只要有对该对象的引用。

分代回收:Java堆内存通常被划分为不同的代(Generation),如新生代(Young Generation)和老年代(Old Generation),以优化垃圾回收性能。

堆内存的结构

Java堆内存通常划分为以下几个区域:

新生代(Young Generation) :存储新创建的对象,分为Eden区、幸存者区(Survivor Space S0和S1)。大多数新对象首先在Eden区分配,经过几次垃圾回收后,如果对象仍然存活,则移到幸存者区,最终移到老年代。

老年代(Old Generation) :存储生命周期较长的对象。经过多次垃圾回收后仍然存活的新生代对象会被移到老年代。

永久代(Permanent Generation)或元空间(Metaspace) :存储类的元数据(如类定义和方法元数据)。Java 8及以后,永久代被移除,改为元空间,并且使用本地内存而不是堆内存。

Java堆内存的工作原理

对象分配:当通过new关键字创建一个对象时,JVM会在堆内存中分配空间。比如:在这个例子中,new Person("John", 25)会在堆内存中分配空间来存储Person对象。


public class Main {
    public static void main(String[] args) {
        // 创建一个对象
        Person person = new Person("John", 25);
    }
}

class Person {
    String name;
    int age;
    //构造方法
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
垃圾回收:Java的垃圾回收机制自动回收不再使用的对象,释放堆内存空间。垃圾回收器(Garbage Collector)会周期性地扫描堆内存,识别不再有任何引用指向的对象,并回收它们占用的内存。

垃圾回收的过程大致分为以下几步:

标记:标记出所有存活的对象。

清除:清除所有未被标记的对象,释放它们占用的内存。

压缩:(可选)将存活的对象移到堆的一端,减少内存碎片,提高分配效率。

堆内存管理中的问题

内存泄漏:虽然Java有垃圾回收机制,但不正确的代码设计仍可能导致内存泄漏,即对象虽然不再使用但仍然被引用,无法被回收。

内存溢出(OutOfMemoryError) :当堆内存被耗尽且垃圾回收无法释放足够内存时,会抛出OutOfMemoryError

性能问题:频繁的垃圾回收会影响应用性能,因此需要优化内存使用和垃圾回收策略。

通过对堆内存和垃圾回收简单的了解(备注,由于不是专业开发可能对堆内存和垃圾回收阐述的不是特别专业,只是作为背景知识补充了解问题😭),我们大概知道上述告警多数是由于内存泄露导致的,那么我们怎么做呢,才能避免此类问题的发生呢?先来看看我们目前的质量保障情况;

2.质量保障

2.1.现有体系

从缺陷到创新:质量保障的新视角

2.2.关键要素

需求质量维度

通过产品输出的PRD文档,研发会输出设计文档,测试对应的也会输出测试用例,这也是对于需求最直观的输出;

从缺陷到创新:质量保障的新视角

过程质量维度

产品会进行需求评审,研发会进行设计评审,测试会进行测试用例评审,三方的目的是拉齐需求,以避免各自的理解有偏差;

从缺陷到创新:质量保障的新视角

交付质量维度

测试会发送验收报告,产品会先进行需求的验收,上线前产品会同步业务验收,业务验收有问题会反馈到产品推进研发优化测试复测,形成循环;

从缺陷到创新:质量保障的新视角

2.3.质量把控

环境治理是有专门的团队负责,不做过多阐述
Diff&CR属于测试左移的范畴,会在改进措施中做说明
监控告警和质量大盘属于测试右移的范畴,也会在改进措施中说明

2.4.交付过程

持续迭代

目前是两周一个迭代,基于这个节奏,去排需求,基本上每个迭代都会排满;

持续集成

主要还是基于Coding集团的代码仓库管理工具▪持续发布▪目前由于特殊性,没有用到集团的JDOS,使用的是自己的发布系统

持续运营

专门团队负责

持续度量

建立线上问题处理群,通过群中Oncall对接
从缺陷到创新:质量保障的新视角
通过保险一线之声进行问题反馈
从缺陷到创新:质量保障的新视角
通过用户满意度评价进行问题反馈

2.5.质量文化

质量&效率基本上就是我们的团队文化,可能也是大部分测试团队的文化,通俗一些就是要测的好还要测的快

3.改进措施

3.1.测试左移Diff&CR

传统的diff&cr基本上我都是通过去让开发大佬开放Coding仓库权限,手动拉取开发分支到本地仓库,进行diff和cr,效率较低,时间成本较高

基于大模型工程化进行CodeReview好处良多,具体接入方式可参照,虚拟账号可自行申请diff&cr ,效果如下,我们发现通过AI CR确实能够帮我们发现一些问题,这些问题可能就是潜在的风险,这样能够补充我们的测试Bad Case从而进行更充分的测试;

从缺陷到创新:质量保障的新视角

3.2.测试右移监控&告警

通过最初我们的案例分析发现目前告警信息确实也存在一部分不完善的情况,只给出了具体的告警信息(当然这个对于专业水平较高的同学也是可以快速定位问题并解决的,但是对于稍微欠缺背景知识的同学比如说不是专业开发理解起来可能就稍微晦涩),所以我对自己所测试的业务告警信息也进行了优化下面是我的一个优化情况,多少对我个人而言我觉得还是有些帮助的😁;
从缺陷到创新:质量保障的新视角

4.未来规划

基于现有质量保障框架下,我会持续探索、持续发现、持续优化,保障业务运转质量更丝滑

点赞
收藏
评论区
推荐文章
好买-葡萄 好买-葡萄
3年前
窗体底端 有了这个告警系统,DBA提前预警不是难题
好买网www.goodmai.comIT技术交易平台摘要:告警功能是各大云平台必不可少的模块,个性化的告警配置,为帮助用户和运维人员及时发现问题发挥着重要作用。本文分享自华为云社区《GaussDB(DWS)数据库智能监控系统告警框架上线啦!》,作者:codefulture。本文将从一下几个方面介绍DMS告警框架:数据库智能监控系统告警
Application Repository一键启用微信告警通知
前言我们在使用云平台时偶尔会在管理员邮箱中收到系统发出的告警通知,如EC2维护信息,这些邮件很容易淹没在收件箱中,没有得到及时处理。另外对于重要的应用我们可能会在CloudWatch设置一些指标告警并进行邮件通知。如果这些都可以发到微信等即时通信软件,就比邮件通知好多了,毕竟很多人都习惯在即时通信软件上查看消息。具体实现原理并不复杂,我们知道微信等即时通信
Application Repository一键启用微信告警通知
前言我们在使用时偶尔会在管理员邮箱中收到系统发出的告警通知,如EC2维护信息,这些邮件很容易淹没在收件箱中,没有得到及时处理。另外对于重要的应用我们可能会在CloudWatch设置一些指标告警并进行邮件通知。如果这些都可以发到微信等即时通信软件,就比邮件通知好多了,毕竟很多人都习惯在即时通信软件上查看消息。具体实现原理并不复杂,我们知道微信等即时通信工具均
慧销平台ThreadPoolExecutor内存泄漏分析
京东生旅平台慧销系统,作为平台系统对接了多条业务线,主要进行各个业务线广告,召回等活动相关内容与能力管理。最近根据告警发现内存持续升高,每隔23天会收到内存超过阈值告警,猜测可能存在内存泄漏的情况,然后进行排查。根据24小时时间段内存监控可以发现,容器的内存在持续上升:
Stella981 Stella981
3年前
CODING DevOps 系列第六课:IT 运维之智能化告警实践
IT运维告警现状目前IT运维领域保证服务运行正常的主要方法是对相关运维指标进行实时监控,并根据经验设定一些规则,通过将实时监控的数据与规则进行对比,当某个指标监控值不符合设定的规则时,则判定为异常的状况,这样的话就会发送对应的告警到告警平台。告警平台收到通知后,会分配给对应的运维人员进行处理,运维人员去根据告警信息来排查,最终定
Stella981 Stella981
3年前
Prometheus 整合 AlertManager
简介Alertmanager主要用于接收Prometheus发送的告警信息,它很容易做到告警信息的去重,降噪,分组,策略路由,是一款前卫的告警通知系统。它支持丰富的告警通知渠道,可以将告警信息转发到邮箱、企业微信、钉钉等。这一节讲解利用AlertManager,把接受到的告警信息,转发到邮箱。实验准备启动http
Stella981 Stella981
3年前
Prometheus监控告警浅析
前言最近有个新项目需要搞一套完整的监控告警系统,我们使用了开源监控告警系统Prometheus;其功能强大,可以很方便对其进行扩展,并且可以安装和使用简单;本文首先介绍Prometheus的整个监控流程;然后介绍如何收集监控数据,如何展示监控数据,如何触发告警;最后展示一个业务系统监控的demo。监控架构Prometheus的整个
Log4j疯狂写日志问题排查 | 京东云技术团队
最近有个Java系统上线后不久就收到了磁盘使用率告警,磁盘使用率已经超过了90%以上,并且磁盘使用率还在不停增长。
真·Redis缓存优化—97%的优化率你见过嘛? | 京东云技术团队
本文通过一封618前的R2M(公司内部缓存组件,可以认为等同于Redis)告警,由浅入深的分析了该告警的直接原因与根本原因,并根据原因提出相应的解决方法,希望能够给大家在排查类似问题时提供相应的思路。一、问题排查1.1邮件告警正值618值班前夕,某天收到了
云监控告警2.0:革新传统告警机制,引领智能化监控新时代
云监控告警机制是云监控体系的核心组成部分,它负责在云服务出现异常或故障时,及时发出告警通知,以便运维人员迅速采取措施解决问题。传统的云监控告警机制虽然能够在一定程度上实现告警功能,但在告警准确性、实时性、智能化等方面存在诸多不足。云监控告警2.0则通过引入先进的技术和算法,对传统告警机制进行了全面升级,大大提高了告警的效率和准确性。