linux内核参数调优

 kernel.shmmax、kernel.shmall、net.ipv4.tcp_mem根据实际服务器内存大小进行调整

echo "net.ipv4.ip_forward = 1   
net.ipv4.conf.all.rp_filter = 1  
net.ipv4.conf.default.rp_filter = 1 
net.ipv4.conf.all.accept_source_route = 0  
net.ipv4.conf.default.accept_source_route = 0   
kernel.sysrq = 0   
kernel.core_uses_pid = 1  
kernel.msgmnb = 65536 
kernel.msgmax = 65536 
kernel.shmmax = 8589934591 
kernel.shmall = 2097152    
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
fs.file-max = 6553560   
###内存资源使用相关设定
vm.vfs_cache_pressure = 100000
vm.swappiness = 10
net.core.wmem_default = 8388608   
net.core.rmem_default = 8388608  
net.core.rmem_max = 16777216 
net.core.wmem_max = 16777216 
net.ipv4.tcp_rmem = 4096 8192 4194304 
net.ipv4.tcp_wmem = 4096 8192 4194304    
net.ipv4.tcp_mem = 196608 262144 393216  
##应对DDOS攻击,TCP连接建立设置
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_synack_retries = 1  
net.ipv4.tcp_syn_retries = 1   
net.ipv4.tcp_max_syn_backlog = 262144 
##应对timewait过高,TCP连接断开设置
net.ipv4.tcp_max_tw_buckets = 6000  
net.ipv4.tcp_tw_recycle = 1  
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_timestamps = 0   
net.ipv4.tcp_fin_timeout = 30 
net.ipv4.ip_local_port_range = 1024 65000
###TCP keepalived 连接保鲜设置
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 15 
net.ipv4.tcp_keepalive_probes = 5

###其他TCP相关调节
net.core.somaxconn = 8192
net.core.netdev_max_backlog = 262144  
net.ipv4.tcp_max_orphans = 3276800    
net.ipv4.tcp_sack = 1  
net.ipv4.tcp_window_scaling = 1"  >> /etc/sysctl.conf

#使配置生效
sysctl -p

各参数说明(红色部分根据实际服务器内存大小进行调整)

net.ipv4.ip_forward = 1   开启IP转发功能
net.ipv4.conf.all.rp_filter = 1  
net.ipv4.conf.default.rp_filter = 1   
"告诉"kernel加强入站过滤(ingress filtering)和出站过滤

net.ipv4.conf.all.accept_source_route = 0

net.ipv4.conf.default.accept_source_route = 0 

是否接受含有源路由信息的ip包。参数值为布尔值,1表示接受,0表示不接受。
在充当网关的linux主机上缺省值为1,在一般的linux主机上缺省值为0。
从安全性角度出发,建议你关闭该功能。
kernel.sysrq = 0   使用sysrq组合键是了解系统目前运行情况,为安全起见设为0关闭
kernel.core_uses_pid = 1  控制core文件的文件名是否添加pid作为扩展,用于调试多线程应用程序
kernel.msgmnb = 65536 所有在消息队列中的消息总和的最大值(msgmnb=64k)
kernel.msgmax = 65536 指定内核中消息队列中消息的最大值(msgmax=64k)
kernel.shmmax = 8589934591 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为8GB物理内存,可取8*1024*1024*1024-1=8589934591
kernel.shmall = 2097152 该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是 8G,那么需要共享内存页数是8GB/4KB=8388608KB /4KB=2097152(页),也就是64Bit系统下8GB物理内存,设置kernel.shmall = 2097152才符合要求

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

关闭IPv6
fs.file-max = 6553560  系统级别的能够打开的文件句柄的数量
vm.vfs_cache_pressure = 100000 该文件表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode cache;增加该值超过100,将导致内核倾向于回收directory和inode cache
vm.swappiness = 10 swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60
net.core.wmem_default = 8388608  为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
net.core.rmem_default = 8388608 为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
net.core.rmem_max = 16777216  为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
net.core.wmem_max = 16777216  为TCP socket预留用于发送缓冲的内存最大值(单位:字节)

net.ipv4.tcp_rmem = 4096 8192 4194304 

net.ipv4.tcp_wmem = 4096 8192 4194304 

为每个TCP连接分配的读、写缓冲区内存大小,单位是字节。

第一个数字表示,为TCP连接分配的最小内存

第二个数字表示,为TCP连接分配的缺省内存

第三个数字表示,为TCP连接分配的最大内存

一般按照缺省值分配,这个例子就是读写均为8KB,共16KB

1.6GB TCP内存能容纳的连接数,约为  1600MB/16KB = 100K = 10万

4.0GB TCP内存能容纳的连接数,约为  4000MB/16KB = 250K = 25万

net.ipv4.tcp_mem = 196608 262144 393216

第一个数字表示,当 tcp 使用的 page 少于 196608 时,kernel 不对其进行任何的干预

第二个数字表示,当 tcp 使用了超过 262144 的 pages 时,kernel 会进入 “memory pressure” 压力模式

第三个数字表示,当 tcp 使用的 pages 超过 393216 时(相当于1.6GB内存),就会报:Out of socket memory

以上数值适用于4GB内存机器,对于8GB内存机器,建议用以下参数:

net.ipv4.tcp_mem = 524288     699050  1048576  (TCP连接最多约使用4GB内存)

net.ipv4.tcp_syncookies = 1  只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用。当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击。
net.ipv4.tcp_synack_retries = 1  为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。减少系统SYN连接重试次数,为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。
net.ipv4.tcp_syn_retries = 1  在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_max_syn_backlog = 262144  表示那些尚未收到客户端确认信息的连接(SYN消息)队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数,系统可以处理更多的并发连接
net.ipv4.tcp_max_tw_buckets = 6000  timewait 的数量,默认是180000。表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息
net.ipv4.tcp_tw_recycle = 1  表示开启TCP连接中TIME-WAIT sockets的快速收回功能,默认为 0 ,表示关闭
net.ipv4.tcp_tw_reuse = 1  开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接),默认为 0 表示关闭。
net.ipv4.tcp_timestamps = 0  时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
net.ipv4.tcp_fin_timeout = 30 减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。缺省值是60秒。
net.ipv4.ip_local_port_range = 1024 65000 表示允许系统打开向外连接的端口范围
net.ipv4.tcp_keepalive_time = 1200 这个参数表示当keepalive启用时,TCP发送keepalive消息的频度(单位:秒)。默认是2小时,若将其设置得小一些,可以更快地清理无效的连接
net.ipv4.tcp_keepalive_intvl = 15  当探测没有确认时,重新发送探测的频度。缺省是75秒。
net.ipv4.tcp_keepalive_probes = 5 在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以tcp_keepalive_intvl之后决定了一个连接发送了keepalive之后可以有多少时间没有回应
net.core.somaxconn = 8192 listen(函数)的默认参数,挂起请求的最大数量限制。web 应用中listen 函数的backlog 默认会给我们内核参数的net.core.somaxconn 限制到128,而nginx 定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值
net.core.netdev_max_backlog = 262144 当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值
net.ipv4.tcp_max_orphans = 3276800  表示系统中最多有多少TCP连接不被关联到任何一个用户文件句柄上。如果超过这里设置的数字,连接就会复位并输出警告信息。这个限制仅仅是为了防止简单的DoS攻击。此值不能太小
net.ipv4.tcp_sack = 1   启用有选择的应答(Selective Acknowledgment),
这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);
(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用
net.ipv4.tcp_window_scaling = 1 支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1

 

你可能感兴趣的:(系统优化)