本文会收集工作中遇到的Hadoop&HBase系统优化涉及到的各个参数,并简要介绍如此设置的意义。
1、禁用集群所有节点的transparent huge page特性,设置方式如下:
echo "never" > /sys/kernel/mm/redhat_transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/redhat_transparent_hugepage/defrag
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
Linux的内存管理采取的是分段&分页的方式,分段实现了粗粒度的管理,而分页则实现了细粒度上虚拟内存到物理内存上的转换。详细地说就是linux内核会依据LRU算法将物理内存中不经常使用的内存页交换到虚拟内存中,所有虚拟内存和物理内存件的映射关系保存在由CPU维护的映射表中。通常情况下linux的页大小是4k,这就意味着当物理内存很大的时候,映射表中的条目将会非常多,进而影响到CPU的检索效率。
一种很显然的方法就是增大page的大小以减少映射表中的条目数,这就是huge page特性设计的出发点。操作系统的后台有一个khugepaged的进程,它会一直扫描所有进程占用的内存,并在可能的时候将4k的page交换为Huge Page。然而,对于内存的各种分配活动不可避免的会需要各种内存锁,直接影响到程序的内存访问