1.避免使用 swap 分区:
swap 分区指的系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使
用。
通过 vm.swappiness 参数控制,值阈为 0 ~ 100,值越高说明操作系统内核更积极的将应用程序的数据交
换到磁盘。
将 Hadoop 守护进程的数据交换到磁盘是很危险的,有可能导致操作超时,所以一般将改值设为 0 。
禁用方法如下,让操作系统尽量不使用 Swap:
echo "vm.swappiness=1" >> /etc/sysctl.conf
sysctl -p
sysctl -a|grep swappiness
2.内存分配策略
vm.overcommit_memory 的值决定分配策略,值通常为 0, 1 和 2
0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,
内存申请失败,并把错误返回给应用进程。
1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2 表示内核允许分配超过所有物理内存和交换空间总和的内存,并且通过 vm.overcommit_ratio 的值设置
超过的比例, 50 表示超过物理内存 50% 。
建议 vm.overcommit_memory 设置为 2 ,并调整 vm.overcommit_ratio 。
修改 vm.overcommit_memory 的三种方式
编辑/etc/sysctl.conf ,增加一行 vm.overcommit_memory = 2 ,然后 sysctl -p 使配置文件生
效
sysctl vm.overcommit_memory = 2
echo 2 > /proc/sys/vm/overcommit_memory
3.修改 net.core.somaxconn 参数
net.core.somaxconn 是 Linux 中的一个内核(kernel) 参数,表示 socket 监听的 backlog 上限。
backlog 是 socket 的监听队列,当一个请求尚未被处理或建立时,会进入 backlog。
而 socket server 可以一次性处理 backlog 中的所有请求,处理后的请求不再位于监听队列中。
当 server 处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。
修改 net.core.somaxconn 的三种方式:
编辑/etc/sysctl.conf, 增加一行 net.core.somaxconn = 32768 ,然后 sysctl -p 使配置文件
生效
sysctl -w net.core.somaxconn = 32768
echo 32768 >/proc/sys/net/core/somaxconn
注意
在 core-default.xml 中参数 ipc.server.listen.queue.size 控制 socket server 的监听队列
长度,即 backlog 长度,默认为 128 。 而 Linux 的参数 net.core.somaxconn 默认也为 128 ,当服
务端(NameNode 或 ResourceManager)繁忙时, 128 是远远不够的,这样需要调大 backlog,建议为大
于等于 32768, 并修改 Hadoop 的 ipc.server.listen.queue.size 的参数。
4.增大同时打开文件描述符的上限
5.禁用文件的访问时间
6.关闭 THP
评论