通讯系统经验谈【三】解读内核参数 - sysctl.conf

在上一篇中http://maoyidao.iteye.com/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. syncookies

net.ipv4.tcp_syncookies = 1

 防止 SYN Flooding攻击,详见:http://maoyidao.iteye.com/admin/blogs/1744277

2. syn-ack

#net.ipv4.tcp_synack_retries=
# net.ipv4.tcp_syn_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.es.net/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

你可能感兴趣的:(技术,通讯)