作者回复: 嗯 bcc memleak也是个很好的分析工具 就是它对内核版本要求高 需要较新的内核才行
作者回复: 谢谢你的建议。这样我也考虑过,只是我们感觉这有点像应试教育先出题再说答案,我主要是担心这会局限住大家的思维。所以我在案例篇里一般都是把具体问题给做一个抽象,能够让大家不局限于某一个问题,而是通过这些抽象的案例来理解问题的本质。
作者回复: 在出现这种假死问题时需要首先想办法来保存事故现场,有了这些现场后就可以分析具体原因了,lockdep和softlockup这些都可以认为是内核问题,所以最好可以构造出来vmcore来进行分析,我通常是使用sysyrq来构造出来vmcore,然后分析这些vmcore。这里有个问题时,往往发生问题的时候就没有办法来执行命令了,所以根据一些信息来提前做好预判很重要,比如根据load值达到多少就认为异常了,或者利用其他一些系统指标,比如内存引起的假死可以借助psi指标来做预判。在构造vmcore时,如果是磁盘故障或者文件系统出了问题,那这个vmcore也可能无法保存下来,这个时候借助网络把这些信息给导出来也是一个方案,嵌入式系统中常用的做法这是把他们保存在非易失内存中,然后重启后解析这些非易失内存。
作者回复: 异常宕机是总会发生的,如果这个时候有未落盘的数据,那这部分数据就会丢失,这其实是难以去避免的。所以这种问题大致是有两个思路:1.数据没保存完整的话,已保存的数据是准确的就好,文件系统会做校验,不完整的数据认为是无效数据。2. 冗余备份来预防单点故障,一台主机宕机很正常,如果多台同时宕机就几乎不可能了,所以冗余备份是很重要的。
作者回复: 进程退出时 会去释放进程的地址空间 如果进程地址空间对应的page没有其他人在引用 就会free掉这些page。slab则是只要来管理内核的数据 通常不用来管理进程数据。
作者回复: 对的 程序挂掉后 这些malloc的内存就不再有引用 就会被释放掉。
作者回复: xfs存在问题的可能性更大