为发挥GBase 8a集群的最佳性能,部署时需对操作系统的部分参数做一些调整修改,详细设置如下表:
参数项 | 设置值 | 含义 |
vm.vfs_cache_pressure | 1024 | 表示内核回收用于directory和inode cache内存的倾向,默认值为100,增加该值超过100,将导致内核倾向于回收directory和inode cache;集群服务器设置此操作系统参数为1024,使操作系统倾向于回收directory和inode cache,避免定时执行sync&&sync&&echo 3>/proc/sys/vm/drop_caches操作 |
vm.min_free_kbytes | 8388608 | 表示强制Linux 操作系统为VM文件系统最低保留多少空闲内存(Kbytes),此参数设置为8G大小可以避免因gbase库进程占用大量内存导致异常 |
kernel.core_uses_pid | 1 | 控制核心转储是否附加PID的核心文。用于调试多线程应序件。 |
net.ipv4.tcp_syncookies | 1 | 控制 TCPsyncookies的使用。 |
net.ipv4.ip_local_reserved_portss | 5050,5258,5288,6666 | 防止数据库需要使用的端口被其他程序强行占用 |
vm.zone_reclaim_mode | 0 | 配置vm.zone_reclaim_mode = 0使得内存不足时去remote memory分配优先于swap out local page |
vm.swappiness | 1 | swappiness参数为swap内存使用倾向,60代表内存剩余60%时会使用swap,设置为1表示强制使用物理内存。 |
net.core.netdev_max_backlog | 262144 | 每个网络接口收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包最大目。 |
vm.overcommit_memory | 0 | 检查是否有足够的内存可用,如果是,允许分配;如内存不够拒绝该请求,并返回一个错误给应用程序。 |
net.core.rmem_default | 8388608 | 接收套字缓冲区大小的默认值(以字节为单位 ) |
net.core.rmem_max | 16777216 | 接收套字缓冲区大小的最大值(以字节为单位 ) |
net.core.somaxconn | 65536 | 用来限制监听(LISTEN)队列最大数据包的数量,超过这个就会导致链接超时或者触发重传机制。 |
net.core.wmem_default | 8388608 | 发送套字缓冲区大小的默认值(以字节为单位 ) |
net.core.wmem_max | 16777216 | 发送套字缓冲区大小的最大值(以字节为单位 ) |
net.ipv4.tcp_fin_timeout | 1 | 如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAITT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60秒。 |
net.net.ipv4.tcp_max_orphans | 3276800 | 系统中最多有少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的 仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值, 更应该增加这个值(如果增加了内存之后 )。 |
net.ipv4.tcp_max_syn_backlog | 262144 | 表示那些尚未收到客户端确认信息的连接( SYN 消息)队列的长度,默认为 1024,加大队列长度为 ,加大队列长度为262144,可以容纳更多等待连接的网络连接数。 |
net.ipv4.tcp_max_tw_buckets | 20000 | 系统在同时所处理的最大timewait sockets数目。如果超过此的话time-wait socket会被立即删除并且显示警告信息。之所以要设定这个 且显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的Dos攻击,千万不要人为的降低这个限制攻击,不过如果网络条件需要比默认值更多,则可以提高它 (或许还要增加内存)。 |
net.ipv4.tcp_mem | 94500000 915000000 927000000 | 第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用的上限。第三个值是内存应用压力的上 限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。 |
net.ipv4.tcp_rmem | 4096 87380 4194304 | TCP 接收缓冲区,3个字段分别是 min,default,max。MIN:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收。 |
net.ipv4.tcp_timestamps | 0 | 时间戳可以避免序列号的卷绕。一个 1Gbps 1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种 “异常”的数据包。 |
net.ipv4.tcp_tw_recycle | 1 | 开启 TCP 连接中 TIME-WAIT sockets的快速回收,默认为0,表示关闭。 |
net.ipv4.tcp_wmem | 4096 87380 4194304 | TCP发送缓冲区,3个字段分别是 min, default,max。Min:为 TCP socket预留用于发送缓冲的内存最小值。每个 TCP socket都可以使用它。 |
net.ipv4.tcp_tw_reuse | 1 | 表示是否允许重新应用处于 TIME-WAIT 状态的socket用于新的TCP连接。 |
net.ipv4.tcp_sack | 1 | 表示是否启用有选择的应答 (Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通 信来说)这个选项应该启用,但是会增加对 CPU的占用。 |
net.ipv4.tcp_window_scaling | 1 | 支持更大的TCP窗口。 如果TCP窗口最大超过 65535(64KB), 必须设置该数值为1。 |
ulimit虚拟内存配置 | /etc/security/limits.conf,添加如下两行,操作系统重启后生效: | 虚拟内存不足会造成的运算缓慢 |
ulimit内存配置 | /etc/security/limits.conf,添加如下内容 | 内存不足时杀掉进程 |
ulimit打开文件数配置 | /etc/security/limits.conf,添加如下内容 | 文件句柄数不足集群使用报错 |
透明页 transparent_hugepage | never | 为保证数据库高效运行,需要关闭 transparent_hugepage 参数 |
服务器操作系统IO调度器 | deadline | GBase集群服务器需要将IO调度器(IO elevator)配置为deadline以提升小文件读写IO效率 |
selinux | disabled | 要求各节点禁用 SELINUX |