作为一个Linux运维工程师,天天跟Linux系统打交道,那么内核优化技巧就必须有所掌握!以下是本人收集的部分Linux内核优化参数,分享给大家。***注意:请根据实际环境进行配置,文中并非每项参数都符合你的实际状况,请斟酌后再配置。
文章源自birdteam.net,作者“Penn”,链接见文章底部。
Sysctl命令用来配置与显示在/proc/sys目录中的内核参数。
如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现。
命令格式:
sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p (default /etc/sysctl.conf)
sysctl [-n] [-e] –a
常用参数的意义:
-w 临时改变某个指定参数的值,如
# sysctl -w net.ipv4.ip_forward=1
-a 显示所有的系统参数
-p从指定的文件加载系统参数
展开索引
修改内核配置文件
vim /etc/sysctl.conf
刷新配置文件
sysctl -p
关闭ipv6支持
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1 #关闭该功能,从而防止icmp风暴,防止网络阻塞,在 RedHat6.x 和 RedHat7 上该值缺省为0。
开启恶意的icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1 #设置它之后,可以忽略由网络中的那些声称回应地址是广播地址的主机生成的ICMP错误。
关闭路由转发(若无需求的话)
net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0
开启反向路径过滤
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
关sysrq功能
kernel.sysrq = 0
core文件名添加pid作为扩展名
kernel.core_uses_pid = 1
开SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1 #开启SYN cookie,出现SYN等待队列溢出时启用cookie处理,防范少量的SYN攻击。默认为0,表示关闭。
修改消息队列长度
kernel.msgmnb = 65536 kernel.msgmax = 65536
设置最大内存共享段大小bytes
kernel.shmmax = 68719476736 kernel.shmall = 4294967296
timewait的数量默认为180000
net.ipv4.tcp_max_tw_buckets = 6000 #系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值将立刻被清楚并输出警告信息。默认值为180000。对于squid来说效果不是很大,但可以控制TIME_WAIT套接字最大值,避免squid服务器被拖死。 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216
每个网络接口接收数据包速率比内核处理这些包的速率快时允许送到队列数据包的最大数目
net.core.netdev_max_backlog = 262144 #表示当在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数量。
限制仅仅是为防止简单的DoS攻击
net.ipv4.tcp_max_orphans = 3276800 #表示系统中最多有多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这里设置的数字,连接就会复位并输出警告信息。这个限制仅仅是为了防止简单的DoS攻击。此值不能太小。
未收到客户端确认信息的连接请求最大值
net.ipv4.tcp_max_syn_backlog = 262144 #表示SYN队列的长度,预设为1024,这里设置队列长度为262 144,以容纳更多的等待连接。 net.ipv4.tcp_timestamps = 0
内核放弃建立连接之前发送SYNACK包数量
net.ipv4.tcp_synack_retries = 1 #设置内核放弃连接之前发送SYN+ACK包的数量。
内核放弃建立连接之前发送SYN包数量
net.ipv4.tcp_syn_retries = 1 #表示在内核放弃建立连接之前发送SYN包的数量。
开timewait快速回收
net.ipv4.tcp_tw_recycle = 1 #开启TCP连接中TIME_WAIT socket的快速回收。默认值为0,表示关闭。
允许将TIME-WAIT sockets重新用于新TCP连接
net.ipv4.tcp_tw_reuse = 1 #开启重用,允许将TIME_WAIT socket用于新的TCP连接。默认为0,表示关闭。 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 2 #保持在FIN-WAIT-2状态的时间,使系统可以处理更多的连接。此参数值为整数,单位为秒。
当keepalive起用的时候TCP发送keepalive消息的频度缺省是2小时
net.ipv4.tcp_keepalive_time = 30 #keepalived启用时TCP发送keepalived消息的拼度。默认位2小时。 net.ipv4.tcp_keepalive_probes = 5 #TCP发送keepalive探测以确定该连接已经断开的次数。根据情形也可以适当地缩短此值。 net.ipv4.tcp_keepalive_intvl = 15 #探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值。
允许系统打开端口范围
net.ipv4.ip_local_port_range = 1024 65000 #指定外部连接的端口范围。默认值为32768 61000。
修改防火墙的表大小默认65536
net.netfilter.nf_conntrack_max = 655350 net.netfilter.nf_conntrack_tcp_timeout_established = 1200
确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0
最后,记得输入下列命令生效配置:
sysctl -p
文章参考:
https://www.cnblogs.com/fusheng11711/p/10916934.html
若需要帮助,请点击以上原文链接联系原作者。