继上一篇,非典型程序员青桑解决了内存泄漏问题,一夜好眠。梦境中,顿时金光大放,万千光芒照进了时光隧道,恍惚间来到了唐朝。这时,青囊化身狄仁杰的高级助手,陪同狄老大、元芳和千牛微前往案发现场。经过一番调查,他很快确定了真凶。虽然终日伏案写代码,但早已被生活驯服,善于察言观色的庆南,早已明白了这起案件的玄机。倒是站在一旁的元放,眉头紧皱,一脸尴尬……狄公上前问道:“元放,你是不是有什么心事?”在这种大案多发的地方,每发生一起案件,都要出动数十万牛卫,大范围封锁现场,探访数万人。一直都有怨言。”狄公笑了笑,指了指青棠,“娘,我带你去远方哥。”青棠奉承了一阵,从包里掏出一个罗盘,得意洋洋的道:“我的乾坤包叫sysAk,这个指南针叫minicoredump。以后怎么封锁现场就清楚了。”元放接过罗盘,摆弄了几下,可见要封锁的区域缩小了不少,官道也顺畅了许多。元芳脸色由忧转喜,忍不住问道:“有了这把利器,锁定现场没问题!就是这样,教教我吧。”狄公哈哈大笑:“别着急,我慢慢讲。”什么是coredump?coredump,顾名思义,就是核心转储。在我们运行的过程中程序如果出现异常退出,往往依靠程序自身的日志很难定位问题的根源,操作系统提供了coredump机制,当程序异常退出时,将进程站点的vma信息存入core文件异常发生,使用这个文件,可以还原异常场景的信息,定位人员可以获取变量值,堆栈信息,内存数据,程序异常时程序的运行位置(甚至记录行码数)等,提高问题定位的效率。就像破案最关键的一步就是获取第一手资料,还原案发现场,并在此基础上推导案件。那么,coredumpp的作用是什么?过程是什么样的?如下图所示,当某个进程出现故障时,内核会启动coredump机制,将故障处的vma等信息转储到一个core文件中。故障后使用gdb加载coredump文件恢复故障现场。通过获取故障现场的变量值、调用栈等信息,可以快速判断故障类型,锁定故障代码位置,查找根源。就像狄先生每次定案,都要先锁定案发现场,然后亲自勘查,提取所有物证和证词,结合现场信息进行推论,还原案发历史,并终于查明罪魁祸首。Coredump资源消耗问题操作系统在内核态生成一个core文件,用于dump进程的所有有效vma信息。这意味着大进程的coredump文件会非常大,甚至达到TB级别。此类大文件在生成和保存过程中严重消耗IO、CPU、内存带宽等资源,对系统的稳定性造成影响。就像之前,要破一个大案子,需要封锁方圆几公里内的交通,动用上百名警力,做大量的侦查调查。但随着技术手段的革新,信息的收集越来越精准,分析排名的手段也越来越精细。同样,是否可以细化coredump信息的收集?Minicoredump登场了。,bss等其他匿名页面信息,比如heapspace,里面的数据虽然很重要,但是在破案的时候大多不会用到,属于low-clue信息。在大进程的vma信息中,low-clue信息的比例还是很高的。因此,我们必须有选择地、有目标地收集。这个时候就该出现minicoredump了,先筛选现场信息。更不用说工作量的优化了,对正常生产的影响也可以降到最低。”庆南站在一旁,羡慕地看着狄老板,默默的将minicoredump记录到sysAK中。这里不仅有内存泄漏定位秘籍,网络诊断工具,不过现在有了minicoredump加持,还能有效过滤匿名页面信息,瘦身core文件,太棒了!举个栗子如下表,这是一个典型的犯罪现场信息分布。minicoredump会收集在有针对性:需要收集红色标记的区间,借助gdb可以帮助我们回放事件过程(播放调用栈),提取关键证据(获取栈上变量、全局变量等信息,等),绿色标注的区域可以在需要的时候进行采集,不影响我们的case解决。103249:./main00000000004000004Kr-x--main00000000006000004Kr----main00000000006010004Krw---main#可执行文件的data段0000000001fa5000132Krw---[anon]#堆空间00007f818800000010372Krw---[anon]00007f8188a2100055164K-----[anon]00007f819000000010372Krw---[anon]……00007f819ca2100055164K-----[anon]00007f81a000000010372Krw---[anon]00007f81a0a2100055164K-----[anon]00007f81a495d0004K-----[anon]00007f81a495e0008192Krw---[anon]#栈空间00007f81a6dfe00010244Krw---[anon]00007f81a77ff0004K-----[anon]00007f81a78000008192Krw---[anon]00007f81a800000010372Krw---[anon]00007f81a8a2100055164K-----[anon]00007f81ac15c0004K-----[anon]00007f81ac15d0008192Krw---[anon]00007f81ac95d0004K-----[anon]00007f81ac95e0008192Krw---[anon]……00007f81ae1600004K-----[anon]00007f81ae1610008192Krw---[anon]00007f81ae9610001808Kr-x--libc-2.17.so00007f81aeb250002044K-----libc-2.17.so00007f81aed2400016Kr----libc-2.17.so00007f81aed280008Krw---libc-2.17.so#sodatasection00007f81aed2a00020Krw---[anon]#soBSS段00007f81aed2f00092Kr-x--libpthread-2.17.so00007f81aed460002044K-----libpthread-2.17.so00007f81aef450004Kr----libpthread-2.17.so00007f81aef460004Krw---libpthread-2.17.so00007f81aef4700016Krw---[anon]00007f81aef4b000136Kr-X-LD-2.17.SO007F81AF15900012KRW---[ANON]#SOLINKMAP0000007F81AF16900012KRW----[ANON]00007F81AF16C16C0004KR[stack]00007fff7eb580008Kr--[anon]00007fff7eb5a0008Kr-x--[anon]fffffffff6000004Kr-x--[anon]#syscalltotal532892K实际性能应该以真实数据为准:我们挑了一个真实的环境来对比同一个进程的coredump,文件大小从3.5G下降到1.9G。减少coredump空间后,堆栈推送等功能不受影响:在更复杂的生产环境中,实际优化率可达80%以上,业务抖动降低30%。也就是说,引入新技术后,封锁的次数减少了,交通也更加顺畅了。狄公问:元芳,此法好吗?元芳连连点头,赞道:minicoredump也是神,地公厉害,厉害!身为高级助理的卿棠站在一旁,用袖子把罗盘擦了一遍又一遍,心里也乐滋滋的。半年后,狄公和元芳在清理大理寺档案库的时候,面前已经没有了堆积如山的档案。多亏了更薄的新文件,腾出空间来品茶谈案。狄公开玩笑地问道——一旁的绿包正要高兴,突然探子送来一份报告,狄公打开看了看,说道:“官道上刚刚发生了一件大案,影响很大,我们得马上离开。”青囊一惊,从梦中惊醒,心想:官道?会不会是新的网络问题。想知道接下来发生了什么,就听下一章吧。(完)参考内容https://www.cnblogs.com/lidabo/p/5014710.htmlhttp://hutaow.com/blog/2013/10/25/linux-core-dump/https://www.cnblogs.com/secondtonone1/p/5732938.html原文链接:https://mp.weixin.qq.com/s/Qntk4yA1afi2GGVZAOVgZA
