知识卡片
THP特性与Hadoop高密度内存运算的隐藏冲突:操作系统底层优化未必适配所有应用负载
内容
某音乐公司为了利用Ext4文件系统的特性,把操作系统从CentOS 5.9升级到了CentOS 6.3,但升级后一部署Hadoop集群、作业一启动,就出现了CPU内核使用率异常飙高的问题。经过长时间的测试排查才发现,问题的根源不在Ext4本身,而在于新版本操作系统默认引入了THP(Transparent Huge Pages,透明大页)特性——这个特性本意是优化内存申请的效率,对大多数应用场景确实有帮助,但Hadoop是一个高密集型内存运算系统,THP这个针对内存申请效率的优化,恰恰对这类高密度内存运算的系统带来了意料之外的副作用(导致CPU在内存管理上花费大量额外开销)。定位到根因之后,解决方案非常直接——通过修改内核参数关闭系统的THP特性,CPU内核使用率立刻恢复正常。这个案例带来的教训是:升级底层基础设施(操作系统版本)时,即使升级的初衷只是想获得某一个具体的目标特性(这里是Ext4文件系统),也很可能连带引入了一系列该版本默认开启的其他新特性(这里是THP),这些”顺带”引入的特性未必对自己的应用负载是中性甚至有益的——某个特性对大多数通用应用场景是优化,对某类特殊负载模式(高密度内存运算)却可能是负优化,这类冲突往往不会在升级评估阶段被注意到,因为评估时关注的焦点通常只放在”我想要的那个具体特性”上,而忽略了同批引入的其他默认变化。这提示了一条基础设施升级的重要原则:任何版本升级都应该被当作”引入了一整批变化”来审慎评估,而不是简化成”只是为了获得某个具体特性”——尤其是对负载模式比较特殊的系统(如Hadoop这类高密度内存运算系统),升级后出现性能异常时,排查方向不应该只局限在自己主动想要的那个变更点上,还要审视这次升级捆绑引入的其他默认行为变化。
参考来源
- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.1 某音乐公司的大数据实践"节,"6.1.3 在大数据平台重构过程中踩过的坑"(源文件:_epub-src/OEBPS/Text/Chapter6_1_4.xhtml)
- 结论依据:原文说明"经过很长时间的测试验证,我们发现化了内存申请的效率,引入了THP的特性,而Hadoop是高密集型内存运算系统,这个改动给Hadoop带来了副作用。通过以下对内核参数的优化关闭系统THP特性,CPU内核使用率马上下降",直接支撑本卡片结论。
- 原始内容:经过很长时间的测试验证,我们发现化了内存申请的效率,引入了THP的特性,而Hadoop是高密集型内存运算系统,这个改动给Hadoop带来了副作用。通过以下对内核参数的优化关闭系统THP特性,CPU内核使用率马上下降。