美丽联合集团蘑菇街技术专家 邵亚方 - 从 Linux 系统内核层面来解决实际问题的实战经验

蘑菇街业务快速增长,随之而来服务的稳定性挑战也越来越大,对于复杂稳定性问题的定位,除了从开发人员的视角来分析,还需要能够从系统、内核的视角来分析,这对一些疑难问题、关键问题的解决来说是很有帮助,甚至是关键的。在定位和解决完这些疑难问题后,我们还构建了一套问题分析和定位平台,帮助业务方实现 devops 自助化。 本次分享将介绍几个在生产环境中解决过的问题案例,可以了解到这些生产环境中的问题,如何产生,如何定位,如何解决。

1. MEILI INC. 从Linux系统内核层⾯面 来解决实际问题的实战经验 by 亚⽅方
2. 背景介绍 蘑菇街业务快速增⻓长,随之⽽而来服务的稳定性挑战也越 来越⼤大,对于复杂稳定性问题的定位,除了了从开发⼈人员 的视⻆角来分析,还需要能够从系统、内核的视⻆角来分析, 这对⼀一些疑难问题、关键问题的解决来说是很有帮助, 甚⾄至是关键的。在定位和解决完这些疑难问题后,我们 还构建了了⼀一套问题分析和定位平台,帮助业务⽅方实现 devops⾃自助化。 MEILI INC.
3. 主要内容 • 常⻅见问题的不不同分析思路路 • 涉及到的内核基本知识 • Linux系统为CentOS-6/CentOS-7 • 对于的内核分别是kernel-2.6.32/kernel-3.10.0 MEILI INC.
4. 稳定性问题概述 说明: 1. ⼀一个问题往往牵涉到操作系统的很多模块,我们以问题的主要解决点来做划分 2. 磁盘IO的问题往往伴随着内存管理理的问题 MEILI INC.
5. 代表性问题 MEILI INC.
6. ⽹网络部分代表性问题分析:TCP重传问题 MEILI INC.
7. ⼩小改进: 如何⾼高效的分析tcp重传问题 特征 tcpdump tcpretrans 改进tcpretrans 优势: 1. 抓取的信息全⾯面 劣势: 1. 内容多,难分析 2. 重量量级,⽐比较消耗系 统资源 3. dump出来的内容分 析不不⽅方便便,需要借助 wireshark分析 优势: 1. 轻量量级,对系统性消 耗⼩小,可以⼀一直运⾏行行 着 2. 信息简介明了了,便便于 快速分析 劣势: 1. 需要掌握内核知识来 使⽤用它 2. 需要⼀一些额外的繁琐 步骤来设置 3. 对于发⽣生重传后连接 存在时间⼩小于1s的显 示不不了了 优势: 1.易易⽤用,不不需要内核专 业知识,只需要⼀一条 命令就可以 2.对于重传后存在时间 ⼩小于1s的连接也可以 显示出来 MEILI INC.
8. 改进后的tcpretrans原理理 MEILI INC.
9. 实时打印内容示例例 问题分析实例例: 可以看到是9092这个端⼝口存在问题,然后分析该端⼝口对应的服务即可 MEILI INC.
10. tcpretrans上线后的效果 • 现在已经被运维以及业务⼈人员⼤大量量使⽤用,在遇 到TCP重传时,他们⾸首先想到的是⽤用这个⼯工具 来抓取下信息。 • 在遇到TCP重传变⾼高时,快速的帮助我们指明 正确的前进⽅方向 • 运⽤用它帮助很多业务⽅方分析了了问题 MEILI INC.
11. 内存管理理代表性问题:内存泄漏漏 MEILI INC.
12. 内存泄漏漏问题的分析⽅方法 分析⽅方法 分析⼯工具以及适⽤用场景 在编译阶段去分析 Google的sanitizers是其中的代表:Asan,Tsan,Msan 内存泄漏漏问题的本质⽅方法都是做在编译及以前的 在运⾏行行时去做分析 Valgrind是其中的代表 他的⼀一个要求是需要使⽤用valgrind来重新执⾏行行应⽤用程序去做跟踪 分析 在运⾏行行时不不打断应⽤用 这是⼀一个难题,业界并没有现成的成熟⽅方案
 程序的执⾏行行去做分析 从技术⼿手段⽽而⾔言,这也是可以去做到的,只是是否有价值 MEILI INC.
13. 内存泄漏漏问题有危害的根源在哪⾥里里? • ⻓长运⾏行行deamon 
 任务起来之后除⾮非去停⽌止他否则就⼀一直运⾏行行着 • 处理理request式 
 只运⾏行行较短时间,内存泄漏漏也不不会有啥问题 
 • 防病易易 治病难! 
 MEILI INC.
14. 案例例:在运⾏行行时不不打断任务去分析内存泄漏漏 • 线上⼏几个机器器出现了了虚拟地址空间快被耗尽 的情况 • 这种问题很难复现,需要抓取线上机器器的现 场信息来分析 MEILI INC.
15. 应⽤用申请内存 MEILI INC.
16. MEILI INC.
17. 磁盘IO代表性问题:buffer IO MEILI INC.
18. buffer IO与writeback MEILI INC.
19. writeback的失控 • 容易易引起的问题 • 内存⻚页回收时的dirty pages • 这是CentOS-6上很容易易出现的问题,所以基于 CentOS-6来讲 • 异步写IO的突发导致IO⾏行行为不不稳定 • 这个问题⼀一直困扰着Linux开发⼈人员吧 MEILI INC.
20. 内存⻚页回收时的dirty pages • 关于dirty page • 关于内存⻚页回收 • 进程在分配内存(物理理内存)时,如果系 统free pages不不⾜足,就会去回收 pagecache(包括clean page和dirtypage) MEILI INC.
21. 然后问题就来了了... • dirty page要写⼊入disk,导致内存分配很慢 MEILI INC.
22. 不不优雅但有效的解决⽅方案 • 调整内存⽔水位,限制page cache⼤大⼩小,确保系统有⾜足够free page MEILI INC.
23. 异步写IO的突发:⼀一个很棘⼿手的问题 MEILI INC.
24. ⼀一些解决⽅方案 MEILI INC.
25. 进程管理理代表性问题:CPU sys利利⽤用率⾼高 MEILI INC.
26. sys瞬间飙⾼高⼜又恢复的问题分析 MEILI INC.
27. 对于这些问题的故障现场收集⽅方法做⼀一个总 结 MEILI INC.
28. 解决这些问题的⼀一些沉淀 MEILI INC.
29. 未来的规划… MEILI INC.
30. THANKS