在上一篇中http://maoyidao.iteye.com/blog/1744309,主要介绍了和系统资源限制相关的参数。本文是通讯系统经验谈的第三部分,继续解读和系统性能相关的内核配置。
上篇介绍了和系统设置有关的几个参数,在一台系统上,连接到一个服务时的本地端口是有限的。由于端口是16位整数,也就只能是0到65535,而0到1023是预留端口,所以能分配的只是 1024到65534,也就是64511个。也就是说,一台机器只能创建六万多个长连接。查看本机端口设置:
net.ipv4.tcp_syncookies = 1
防止 SYN Flooding攻击,详见:http://maoyidao.iteye.com/admin/blogs/1744277
#net.ipv4.tcp_synack_retries=
# net.ipv4.tcp_syn_retries=
maoyidao注:syn-ack握手状态重试次数,默认5,网上有朋友说可改为1或2;通常我的建议是如果没有试验证明在特定场景下明显优势,不要修改默认值,因此本场此参数未指定
kernel.msgmnb = 65536
kernel.msgmax = 65536
指定内核中消息队列中消息的最大值(msgmax=64k),default:8192
所有在消息队列中的消息总和的最大值(msgmnb=64k),默认值:16384
即从一个进程发送到另一个进程的消息的最大长度(bytes),进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。
maoyidao注:增大消息队列内存值,提高IPC效率
kernel.shmmax = 68719476736
Shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降 。32bit系统中可以设置为系统可支撑的最大值:4G;本系统中设置为64G(这个值实际上超过了前端机的最大内存12G),内存型服务器,比如96G,或128G服务器应该设置的更大。
kernel.shmall = 4294967296
含义:系统中共享内存页总
getconf PAGESIZE
4096
total bytes = 4294967296 * 4096 = 16G
# 三个整数的向量: min, default, max
net.ipv4.tcp_rmem = 8192 87380 8738000
# min = 4k (same as pagesize), default = 64k, max = 6.25m
net.ipv4.tcp_wmem = 4096 65536 6553600
#
#
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
以上参数的配置可以参考:
# 安全策略
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.ip_no_pmtu_disc = 1
# 含义:当启用keepalive的时候,TCP发送keepalive消息的频度
net.ipv4.tcp_keepalive_time = 1800
# Controls IP packet forwarding
# 作为前端服务器,禁制IP转发,这个没什么好说的;
net.ipv4.ip_forward = 0
# Controls source route verification
# 开启反向路径过滤
net.ipv4.conf.default.rp_filter = 1
# 含义:记录的那些尚未收到客户端确认信息的链接请求的最大值。 默认值为4096 如果设置这个值大于4096最好同时调
# 整include/net/tcp.h中的TCP_SYNQ_HSIZE,保证TCP_SYNQ_HSIZE*16 小于或等于tcp_max_syn_backlo,
# 然后重新编译内核。
net.ipv4.tcp_max_syn_backlog = 8192