coredump 瘦身风云(梦到下雨房子塌了一半)
haoteby 2025-04-30 16:51 32 浏览
继上一篇非典型程序员青囊搞定内存泄露问题后,美美地睡了一觉。睡梦中,突然金光闪闪,万道光芒照进时光隧道,恍惚来到大唐神龙年间。青囊此时化身狄仁杰高级助理,陪同狄老大和元芳及千牛卫来到案发现场,一番勘察后迅速锁定真凶。虽整日伏于桌前写代码,但早被生活驯服得谨小慎微、擅于察言观色的青囊亦早已悟透了这断案的奥秘。
只是,站在一旁的元芳眉头紧锁,面露难色......
狄公上前问道:元芳,有心事?
元芳起身答道:“大人断案如神,只是像长安这种要案频繁的地方,每次案发,都要出动上百千牛卫来大面积封锁现场,走访上万群众,耗费人力不说,还严重阻塞交通,影响了正常的生产秩序,导致其它业务部门受损,一直以来是怨声载道啊。”
狄公笑了笑,手指向青囊,“囊啊,给你元芳哥show一下”。
青囊一阵马屁之后,从袋中摸出一罗盘,得意道:“我这乾坤袋唤做sysAk,这罗盘叫minicoredump,以后如何封锁现场,看它就清楚了”。元芳接过罗盘,顺手摆弄了几下,上面显示要封锁的现场缩小了不少,官道也畅通许多。元芳脸色忧转喜,不禁问道:有此利器,锁定现场无忧矣!只是它是怎么做到的,还请大人示教一下。
狄公哈哈大笑:“不急,且听我慢慢道来”。
什么是coredump?
coredump 顾名思义,就是核心转储。我们的程序在运行过程中,如果发生了异常退出,光靠程序自身log往往是很难定位问题根因的。操作系统提供了一套coredump机制,在异常发生的时候,将进程现场的vma信息存储到core文件中去。利用这个文件,就能够恢复异常现场的信息,定位人员可以从中获取到变量值、栈信息、内存数据,程序异常时的运行位置(甚至记录代码行号)等等,提高问题定位效率。就像断案最关键的步骤就是去获取第一手信息,还原案发现场,在此基础上进行案件推演。
那么,coredump的流程是什么样子的呢?
如下图所示,当进程发生故障的时候,内核就会启动coredump机制将故障现场的vma等信息转储成core文件。故障过后,利用gdb加载coredump文件来还原故障现场。通过获取故障现场变量值、调用栈等信息,可以快速确定故障类型,锁定故障代码位置,找到根因。
就像狄公每次一次断案,都要先锁定发现场,然后亲自勘查,提取所有物证和证言,结合现场信息推演,还原案发经过,最终锁定作案元凶。
coredump资源消耗问题
操作系统在内核态生成core文件,是要将进程的有效vma信息全量dump出来。这就意味着大进程的coredump文件会非常庞大,甚至可以达到TB级别。这类大文件在生成和保存过程中严重消耗了IO、CPU、内存带宽等资源,对系统的稳定性带来冲击。就像之前要侦破一起大案,需要封锁方圆数公里内交通,动用数百警力做大量的摸排走访工作。但随着技术手段革新,收集信息也更准确,摸排手段也越来越精细化。同样的,coredump信息收集是否也能做到精细化?
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。
coredump空间缩小后,不影响推栈等功能:
在更为复杂的生产环境,实际优化幅度可以达到80%以上,业务抖动下降了30%。换句话说,在引用了新技术以后,封锁量减少,交通也就更顺畅了。
狄公问:元芳,此法可好?
元芳连连点头,啧啧称赞:minicoredump神也神也,狄公了不得、了不得啊!
作为高级助理的青囊,站在一旁,用衣袖一遍一遍擦拭罗盘,心里也乐开了花。半年后,狄公和元芳一行在清理大理寺档案库房,眼前已然不是堆叠成山的卷宗。得益于变薄的新卷宗,还腾挪出了一方天地,品茶说案,心旷神怡。
狄公戏问——
在一旁的青囊正要开心,突然斥候送来一份搪报,狄公拆开看了,说道:官道上刚出了桩大案,影响甚大,我们要马上出发。青囊一惊,从梦中醒来,寻思着:官道?难道是新出了网络问题。欲知后事如何,且听下回分解。(完)
原文链接:
http://click.aliyun.com/m/1000290001/
本文为阿里云原创内容,未经允许不得转载。
相关推荐
- DIY桌面激光雕刻机#是时候展现真正的技术了
-
激光雕刻机。这期视频我们来看一下我是如何DIY一台桌面激光雕刻机。前几天在水池子边上发现了一台旧电脑,我看这电脑上还有一些东西可以利用到,比如光驱上面拆出了步进电机和滑轨。所以本期视频我将用这些废品去...
- 100000块多米诺骨牌拼成超级马里奥,这款机器人1天就完成了
-
智东西(公众号:zhidxcom)编译|王健恩编辑|高歌智东西7月30日消息,美国工程师兼YouTube博主MarkRober创造出了一个可以自动摆放多米诺骨牌的机器人。这个机器人被命名为D...
- 这个3D打印机器人可以在30秒内打开密码锁
-
密码锁看似很安全?也许曾经是,但现在你可要当心了!这是因为一台3D打印制造的机器人就可以在半分钟内打开你的密码锁。上周四,知名黑客萨米·卡姆卡尔(SamyKamkar)在自己的网站上公布了一个称之为...
- 密码锁也不安全 这款机器人30秒即可自动打开
-
大学生和体育爱好者们要注意了,千万不要再把贵重物品存放在公共储物柜里。因为现在已经出现了一种3D打印的机器人,据说世界上各大锁商推出的大部分密码锁,它都能够在30秒之内打开。著名黑客山米·卡姆卡(Sa...
- 硬件单片机模拟器,再也不用买开发板了...
-
#头条创作挑战赛#记得2006年在凌阳科技(sunplus)工作的时候,凌阳科技开发了自己的编译器/集成开发环境(unspIDE),那个IDE除了有keil那样的编辑器、编译器、链接器、调试器、下载...
- 3D打印机分哪几部分构成?(3d打印机结构组成及系统分析)
-
3D打印机的构成根据技术类型(如FDM、SLA、SLS等)有所不同,但以最常见的FDM(熔融沉积成型)3D打印机为例,其核心组成部分可分为以下模块:1.机械结构框架提供整体支撑和稳定性,常见材质为金...
- 初学者学伺服都需要什么?石家庄诺仕通
-
#初学者学伺服都需要什么?#对于初学者学习伺服系统,需要从...
- arduino(arduino是单片机吗)
-
arduino学习笔记arduino学习笔记1-什么是arduino?...
- 自制写字机,你需要的全套资料都在这里
-
小编之前发过《用废旧光驱制作迷你绘图仪》,很多读者都成功制作了自己的绘图仪。但是该方法的缺点是gcode要在inkscape软件中生成,然后通过grbl-controller这个没有界面的程序发送画图...
- 自己动手DIY3D打印机 瞬间效果出现桌面时,大家都惊呆了!
-
3D打印机,对数码产品比较了解的朋友都知道,但是真正玩过的童鞋可能就不多了。其实3D打印机离我们并不远,随着3D打印技术越来越成熟,3D打印机的学习资料也越来越多,这让自己动手做一台桌面3D打印机也成...
- 机器人仅用24小时将十万块多米诺骨牌拼出马里奥,创下世界纪录
-
十万块多米诺骨牌倒下是个啥场面?等等,十万块?那得搭多久啊?...
- 如何制作一个机器人?(制作机器人的方法)
-
1.简单机械机器人(例如自动小车)2.智能机器人(带有人工智能或计算机视觉)3.工业机器人(用于生产自动化)4.人形机器人(类人结构,可以行走、对话)...
- CrowPi2树莓派4学习套件评测第1部分–开箱和首次启动
-
文章来源:CNXSoftware中文站2020年6月,我曾写过一篇关于深圳易科诺...
- 基于 Arduino UNO 的蓝牙汽车(arduino智能小车蓝牙控制app)
-
HC-05蓝牙模块HC-05是一款易于使用的蓝牙SPP模块,针对流畅的串行无线通信配置进行了优化。串口蓝牙模块是完全合格的蓝牙V2.0+EDR(增强数据速率)3Mbps调制,具有总2.4...
- 电机驱动设计方案带你初识机电一体化
-
在直流电机驱动电路的设计中,主要考虑以下几点:功能:电机是单向还是双向转动?需不需要调速?...