在上一篇中http://maoyidao./blog/1744309,主要介绍了和系统资源限制相关的参数。本文是通讯系统经验谈的第三部分,继续解读和系统性能相关的内核配置。
上篇介绍了和系统设置有关的几个参数,在一台系统上,连接到一个服务时的本地端口是有限的。由于端口是16位整数,也就只能是0到65535,而0到1023是预留端口,所以能分配的只是 1024到65534,也就是64511个。也就是说,一台机器只能创建六万多个长连接。查看本机端口设置: maoyidao 写道
sysctl -a | grep port_range
net.ipv4.ip_local_port_range = 1024 65000 /etc/sysctl.conf配置1. syncookiesnet.ipv4.tcp_syncookies = 1 防止 SYN Flooding攻击,详见:http://maoyidao./admin/blogs/1744277 2. syn-ack#net.ipv4.tcp_synack_retries= maoyidao注:syn-ack握手状态重试次数,默认5,网上有朋友说可改为1或2;通常我的建议是如果没有试验证明在特定场景下明显优势,不要修改默认值,因此本场此参数未指定 3. 内核消息/内存管理设置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 4. 网络设置# 三个整数的向量: 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
以上参数的配置可以参考:
http://fasterdata./host-tuning/linux/ 写道
# increase TCP max buffer size settable using setsockopt()
net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # increase Linux autotuning TCP buffer limit net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 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 |
|