coredump 瘦身风云

简介: minicoredump神也!

2E50B7B0-B331-4c46-9CF7-1EE96134686B.png

继上一篇非典型程序员青囊搞定内存泄露问题后,美美地睡了一觉。睡梦中,突然金光闪闪,万道光芒照进时光隧道,恍惚来到大唐神龙年间。青囊此时化身狄仁杰高级助理,陪同狄老大和元芳及千牛卫来到案发现场,一番勘察后迅速锁定真凶。虽整日伏于桌前写代码,但早被生活驯服得谨小慎微、擅于察言观色的青囊亦早已悟透了这断案的奥秘。

只是,站在一旁的元芳眉头紧锁,面露难色......

47DDCC85-AF29-4153-9EF0-C52BE82256F7.png

狄公上前问道:元芳,有心事?

元芳起身答道:“大人断案如神,只是像长安这种要案频繁的地方,每次案发,都要出动上百千牛卫来大面积封锁现场,走访上万群众,耗费人力不说,还严重阻塞交通,影响了正常的生产秩序,导致其它业务部门受损,一直以来是怨声载道啊。”

狄公笑了笑,手指向青囊,“囊啊,给你元芳哥show一下”。

青囊一阵马屁之后,从袋中摸出一罗盘,得意道:“我这乾坤袋唤做sysAk,这罗盘叫minicoredump,以后如何封锁现场,看它就清楚了”。元芳接过罗盘,顺手摆弄了几下,上面显示要封锁的现场缩小了不少,官道也畅通许多。元芳脸色忧转喜,不禁问道:有此利器,锁定现场无忧矣!只是它是怎么做到的,还请大人示教一下。

狄公哈哈大笑:“不急,且听我慢慢道来”。

什么是coredump?

coredump 顾名思义,就是核心转储。我们的程序在运行过程中,如果发生了异常退出,光靠程序自身log往往是很难定位问题根因的。操作系统提供了一套coredump机制,在异常发生的时候,将进程现场的vma信息存储到core文件中去。利用这个文件,就能够恢复异常现场的信息,定位人员可以从中获取到变量值、栈信息、内存数据,程序异常时的运行位置(甚至记录代码行号)等等,提高问题定位效率。就像断案最关键的步骤就是去获取第一手信息,还原案发现场,在此基础上进行案件推演。

那么,coredump的流程是什么样子的呢?

如下图所示,当进程发生故障的时候,内核就会启动coredump机制将故障现场的vma等信息转储成core文件。故障过后,利用gdb加载coredump文件来还原故障现场。通过获取故障现场变量值、调用栈等信息,可以快速确定故障类型,锁定故障代码位置,找到根因。

33DB9196-EC16-42ec-ADBE-01623DA6FADA.png

就像狄公每次一次断案,都要先锁定发现场,然后亲自勘查,提取所有物证和证言,结合现场信息推演,还原案发经过,最终锁定作案元凶。

318FB135-AF07-4533-BF6A-6EB192A85D91.png

coredump资源消耗问题

操作系统在内核态生成core文件,是要将进程的有效vma信息全量dump出来。这就意味着大进程的coredump文件会非常庞大,甚至可以达到TB级别。这类大文件在生成和保存过程中严重消耗了IO、CPU、内存带宽等资源,对系统的稳定性带来冲击。就像之前要侦破一起大案,需要封锁方圆数公里内交通,动用数百警力做大量的摸排走访工作。但随着技术手段革新,收集信息也更准确,摸排手段也越来越精细化。同样的,coredump信息收集是否也能做到精细化

F820F3A4-DB2F-441e-A320-55D7B8D25AE3.png

minicoredump登场

“元芳啊,定位问题,就像咱们天天去断案一样,走访的关键是要先收集到高价值的线索,比如栈空间、data、bss等。其它的匿名页信息,像堆空间,里面的数据虽然很重要,但是对于断案来说大多情况下用不到,属于低线索信息。而在大进程的vma信息中,低线索信息占比还非常高。因此,我们要有选择、有目标地收集。这个时候,就该minicoredump登场了,将现场信息先筛选一遍。工作量优化了不说,对正常生产影响也可以降到最小。”

青囊在一旁,钦佩地望着狄老大,默默地把minicoredump收录到sysAK里。这里面不仅有内存泄漏定位秘籍,网络诊断利器,如今还有minicoredump加持,还可以有效地过滤过滤匿名页信息,对core文件进行瘦身,妙哉妙哉!

举个栗子

如下表所示,这个是一个典型的案发现场信息分布。minicoredump会针对性地进行收集:标红的区间需要收集起来,借助于gdb,就可以帮我们将案发过程回放(打调用栈)和关键物证提取(获取栈上变量、全局变量等信息),而标绿的区域可以在必要的时候再收集,不影响我们断案。

103249:   ./main
0000000000400000      4K r-x-- main

0000000000600000      4K r---- main

0000000000601000      4K rw--- main    #可执行文件的data段

0000000001fa5000    132K rw---   [ anon ]  #堆空间

00007f8188000000  10372K rw---   [ anon ]

00007f8188a21000  55164K -----   [ anon ]

00007f8190000000  10372K rw---   [ anon ]

……

00007f819ca21000  55164K -----   [ anon ]

00007f81a0000000  10372K rw---   [ anon ]

00007f81a0a21000  55164K -----   [ anon ]

00007f81a495d000      4K -----   [ anon ]

00007f81a495e000   8192K rw---   [ anon ]  #栈空间

00007f81a6dfe000  10244K rw---   [ anon ]

00007f81a77ff000      4K -----   [ anon ]

00007f81a7800000   8192K rw---   [ anon ]

00007f81a8000000  10372K rw---   [ anon ]

00007f81a8a21000  55164K -----   [ anon ]

00007f81ac15c000      4K -----   [ anon ]

00007f81ac15d000   8192K rw---   [ anon ]

00007f81ac95d000      4K -----   [ anon ]

00007f81ac95e000   8192K rw---   [ anon ]

……

00007f81ae160000      4K -----   [ anon ]

00007f81ae161000   8192K rw---   [ anon ]

00007f81ae961000   1808K r-x-- libc-2.17.so

00007f81aeb25000   2044K ----- libc-2.17.so

00007f81aed24000     16K r---- libc-2.17.so

00007f81aed28000      8K rw--- libc-2.17.so #so data段

00007f81aed2a000     20K rw---   [ anon ]   #so BSS段

00007f81aed2f000     92K r-x-- libpthread-2.17.so

00007f81aed46000   2044K ----- libpthread-2.17.so

00007f81aef45000      4K r---- libpthread-2.17.so

00007f81aef46000      4K rw--- libpthread-2.17.so

00007f81aef47000     16K rw---   [ anon ]

00007f81aef4b000    136K r-x-- ld-2.17.so

00007f81af159000     12K rw---   [ anon ] #so link map

00007f81af169000     12K rw---   [ anon ]

00007f81af16c000      4K r---- ld-2.17.so

00007f81af16d000      4K rw--- ld-2.17.so

00007f81af16e000      4K rw---   [ anon ]

00007fff7eafc000    132K rw---   [ stack ]

00007fff7eb58000      8K r----   [ anon ]

00007fff7eb5a000      8K r-x--   [ anon ]

ffffffffff600000      4K r-x--   [ anon ]  #syscall

total           532892K

实际表现

该要拿真实数据说话:我们挑了一个真实的环境对比。同样的进程coredump,文件大小从3.5G下降到了1.9G。

EA231050-1B54-4cdb-87D1-92257F4B8293.png

coredump空间缩小后,不影响推栈等功能:

1BA7829C-E5E6-4e5e-B67B-A7CB6A2CDA44.png

在更为复杂的生产环境,实际优化幅度可以达到80%以上,业务抖动下降了30%。换句话说,在引用了新技术以后,封锁量减少,交通也就更顺畅了。

狄公问:元芳,此法可好?

元芳连连点头,啧啧称赞:minicoredump神也神也,狄公了不得、了不得啊!

作为高级助理的青囊,站在一旁,用衣袖一遍一遍擦拭罗盘,心里也乐开了花。半年后,狄公和元芳一行在清理大理寺档案库房,眼前已然不是堆叠成山的卷宗。得益于变薄的新卷宗,还腾挪出了一方天地,品茶说案,心旷神怡。

狄公戏问——

70C00B08-4321-4ee6-937F-A49CC6E6428E.png

在一旁的青囊正要开心,突然斥候送来一份搪报,狄公拆开看了,说道:官道上刚出了桩大案,影响甚大,我们要马上出发。青囊一惊,从梦中醒来,寻思着:官道?难道是新出了网络问题。欲知后事如何,且听下回分解。(完)

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谁来拯救存量SGX1平台?又一个内核特性合并的血泪史

简介: 今天的故事主角,是一个被称为Flexible Launch Control的SGX平台特性。 前言 自从Intel内核开发人员Jarkko Sakkinen于2017年9月2日在intel-sgx-kernel-devlists.01.org邮件列表上发出v1版的SGX in-tree驱动以来,时间已经过去了3年多了…

DataWorks 功能实践速览

简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率! 功能推荐:独享数据集成资源组 如上期数据同步解决方案介绍,数据集成的批数据同步任务运行时,需要占用一…

spring 事务隔离级别和传播行为_Java工程师面试1000题146-Spring数据库事务传播属性和隔离级别...

146、简介一下Spring支持的数据库事务传播属性和隔离级别介绍Spring所支持的事务和传播属性之前,我们先了解一下SpringBean的作用域,与此题无关,仅做一下简单记录。在Spring中,可以在元素的scope属性中设置bean的作用域&#xff0…

长江存储发布PCle4.0 固态硬盘致态TiPro7000,顺序读取7400MB/s

2021年12月29日,长江存储重磅发布全新消费级旗舰固态硬盘产品致态TiPro7000。该产品采用基于Xtacking(晶栈) 2.0架构的长江存储第三代三维闪存芯片,支持PCle Gen4x4接口、NVMe 1.4协议,顺序读取速度高达7400MB/s。该产…

图像ISP处理——畸变校正算法

图像畸变校正算法主要用于矫正图像中因为摄像机镜头畸变而引起的形状和尺寸变化。摄像机镜头畸变主要包括径向畸变和切向畸变。以下是一些常见的图像畸变校正算法: 多项式畸变校正法(Polynomial Distortion Correction): 原理&am…

KubeDL 加入 CNCF Sandbox,加速 AI 产业云原生化

简介: 2021 年 6 月 23 日,云原生计算基金会(CNCF)宣布通过全球 TOC 投票接纳 KubeDL 成为 CNCF Sandbox 项目。KubeDL 是阿里开源的基于 Kubernetes 的 AI 工作负载管理框架,取自"Kubernetes-Deep-Learning"…

预登录握手失败_英雄联盟手游登录问题汇总

1、出现“无法安装完成”的情况已经获取了资格,但出现“无法安装完成”的情况,譬如谷歌商店的下载界面一直闪退、下载没进度、卡在安装中、卡在等待中怎么办?可前往第三方下载软件,(推荐介绍GamesToday)下载游戏。2、提示:目前还…

云云协同解决方案全景图发布 华为云助力科技企业云上创新

12月29日,以“云云协同 共创云上新价值”为主题的华为云&华为终端云服务创新峰会2022在京圆满召开。华为云与产业专家和企业代表们共同探讨了在产业数字化机遇与挑战并存的新形势下,如何推动产业升级,共创新价值。 会上,面向科…

解密万亿参数M6模型预训练背后的分布式框架Whale

简介: 最近,阿里云PAI团队和达摩院智能计算实验室一起发布“低碳版”巨模型M6,大幅降低万亿参数超大模型训练能耗。借助我们自研的Whale框架仅使用480卡GPU,即训练出了规模达人类神经元10倍的万亿参数多模态大模型M6,与…

居然之家:核心业务系统全面上云,采用PolarDB替代传统商业数据库

简介: 国内家居零售龙头企业居然之家完成7大核心业务系统全面上云工作,并实现ERP等核心业务系统从传统商业数据库向阿里云PolarDB云数据库的替换,助力业务系统整体处理能力提升50%以上,弹性能力提升3倍以上,大幅提升应…

c oracle实体模型,ADO.NET实体数据模型详细介绍

OleDbConnection,OracleConnection 或者SqlConnection这种连接,直接执行sql语句。现在的连接方式执行sql语句有了很大的不同,下面先看看简单的单表的增删改查操作,然后再看多表的关联查询,带参数查询等。一、ADO.NET E…

面向工业场景,如何实现绿色智能?

从瓦特的蒸汽机开始轰鸣,到爱迪生的电灯照亮黑暗,从埃尼阿克把0和1变成通用的语言,再到人工智能的无处不在。一次工业革命,会带来一次社会的演进,而每一次技术升级的背后,产业升级也几乎是必然。但产业发展…

云原生,开发者的黄金时代

简介: 如果说云是一种信仰,那么云原生就是一种态度,时代呼唤人人都应成为云原生开发者。 作者 | 丁宇(叔同),阿里巴巴研究员,阿里云云原生应用平台负责人 对开发者而言,这是一个最…

如何玩转 WebGL 并行计算

简介: 如今在 Web 端使用 WebGL 进行高性能计算已有不少实践,例如在端智能领域中的 tensorflow.js,再比如可视化领域中的 Stardust.js。 作者 | 沧东 来源 | 阿里技术公众号 如今在 Web 端使用 WebGL 进行高性能计算已有不少实践&#xff0c…

数字孪生+交通,到底有啥用?

作者 | 小枣君来源 | 鲜枣课堂这些年来,信息技术的发展有了明显变化。以云计算、大数据、人工智能为代表的算力技术演进,以及以全光网络、4G/5G、Wi-Fi 6为代表的联接力技术飞跃,使得人们对数字技术提出了更高的期望。人们希望在信息化的基础…

万物智联时代的终端智能「管家」 重磅升级:混合云IoT一体机

简介: 「混合云IoT一体机」边缘部署、开箱即用、安全稳定、智管易用,通过定制软件和硬件相结合,预先定制、集成、测试和优化,实现快速部署和远程运维,并提升后续系统可用性和运维效率,是万物互联时代企业数…

今天来聊聊 Redis 的主从复制

作者 | 阿Q来源 | 阿Q说代码今天我们就从配置文件、设计原理、面试真题三个方面来聊一聊 Redis 的主从复制。在 Redis 复制的基础上,使用和配置主从复制非常简单,能使得从 Redis 服务器(下文称 replica)能精确的复制主 Redis 服务…

基于英特尔® 优化分析包(OAP)的 Spark 性能优化方案

简介: Spark SQL 作为 Spark 用来处理结构化数据的一个基本模块,已经成为多数企业构建大数据应用的重要选择。但是,在大规模连接(Join)、聚合(Aggregate)等工作负载下,Spark 性能会面…

表格长度_知道你的成绩单是怎么打印的吗?超长Excel表格1页打印,拯救A4纸

中小学的成绩单,红色的一张榜真实的魔鬼!每次都得瞄半小时才找得到自己的全部科目成绩,不知道是不是为了节省A4纸~到了大学我才知道A4纸的珍贵,字小算什么,打印论文恨不得双面打印。要是能八号字打印更好了~到了工作的…

苹果电脑上使用linux环境变量,mac系统下修改环境变量

苹果电脑使用率越来越高,在mac系统下研发,性能要比在windows下快不少,既然要开发,免不了要配置环境变量.下面是学习啦小编收集整理的mac系统下修改环境变量,希望对大家有帮助~~mac系统下修改环境变量的方法工具/原料os…