sysctl.conf内核参数优化_参数详解

sysctl.conf工作原理

sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。它包含一些TCP/IP堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量。

limits.conf设置

1)暂时生效,适用于通过 ulimit 命令登录 shell 会话期间

ulimit -SHn 65535
2)永久生效,通过将一个相应的 ulimit 语句添加到由登录 shell 读取的文件之一(例如 ~/.profile),即特定于 shell 的用户资源文件;或者通过编辑/etc/security/limits.conf

#比如添加到/etc/profile
echo ulimit -SHn 65535 >> /etc/profile
source /etc/profile

#修改最大进程和最大文件打开数限制
vi /etc/security/limits.conf

  • soft nproc 11000
  • hard nproc 11000
  • soft nofile 655350
  • hard nofile 655350

sysctl.conf设置

#优化TCP
vi /etc/sysctl.conf
#禁用包过滤功能
net.ipv4.ip_forward = 0
#启用源路由核查功能
net.ipv4.conf.default.rp_filter = 1
#禁用所有IP源路由
net.ipv4.conf.default.accept_source_route = 0
#使用sysrq组合键是了解系统目前运行情况,为安全起见设为0关闭
kernel.sysrq = 0
#控制core文件的文件名是否添加pid作为扩展
kernel.core_uses_pid = 1
#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
net.ipv4.tcp_syncookies = 1
#每个消息队列的大小(单位:字节)限制
kernel.msgmnb = 65536
#整个系统最大消息队列数量限制
kernel.msgmax = 65536
#单个共享内存段的大小(单位:字节)限制,计算公式64G102410241024(字节)
kernel.shmmax = 68719476736
#所有内存大小(单位:页,1页 = 4Kb),计算公式16G
102410241024/4KB(页)
kernel.shmall = 4294967296
#timewait的数量,默认是180000
net.ipv4.tcp_max_tw_buckets = 6000
#开启有选择的应答
net.ipv4.tcp_sack = 1
#支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
net.ipv4.tcp_window_scaling = 1
#TCP读buffer
net.ipv4.tcp_rmem = 4096 131072 1048576
#TCP写buffer
net.ipv4.tcp_wmem = 4096 131072 1048576
#为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
net.core.wmem_default = 8388608
#为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
net.core.wmem_max = 16777216
#为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
net.core.rmem_default = 8388608
#为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
net.core.rmem_max = 16777216
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144
#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn = 262144
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
net.ipv4.tcp_max_orphans = 3276800
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
net.ipv4.tcp_max_syn_backlog = 262144
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
net.ipv4.tcp_timestamps = 0
#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 1
#在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1
#开启TCP连接中time_wait sockets的快速回收
net.ipv4.tcp_tw_recycle = 1
#开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
net.ipv4.tcp_tw_reuse = 1
#1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
net.ipv4.tcp_mem = 94500000 915000000 927000000
#如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 15
#表示当keepalive起用的时候,TCP发送keepalive消息的频度(单位:秒)
net.ipv4.tcp_keepalive_time = 30
#对外连接端口范围
net.ipv4.ip_local_port_range = 2048 65000
#表示文件句柄的最大数量
fs.file-max = 102400

其他设置

可以通过/etc/sysctl.conf控制和配置Linux内核及网络设置。

#避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1

#开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1

#开启SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1

#开启并记录欺骗,源路由和重定向包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

#处理无源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

#开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

#确保无人能修改路由表
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

#不充当路由器
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

#开启execshild
kernel.exec-shield = 1
kernel.randomize_va_space = 1

#IPv6设置
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1

#优化LB使用的端口

#增加系统文件描述符限制
fs.file-max = 65535

#允许更多的PIDs (减少滚动翻转问题); may break some programs 32768
kernel.pid_max = 65536

#增加系统IP端口限制
net.ipv4.ip_local_port_range = 2000 65000

#增加TCP最大缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608

增加Linux自动调整TCP缓冲区限制
最小,默认和最大可使用的字节数
最大值不低于4MB,如果你使用非常高的BDP路径可以设置得更高

#Tcp窗口等
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1

补充:sysctl.conf文件参数rp_filter

系统:Centos6

影响:

路径:/etc/sysctl.conf

rp_filter - INTEGER

  0 - No source validation.
   1 - Strict mode as defined in RFC3704 Strict Reverse Path
       Each incoming packet is tested against the FIB and if theinterface
       is not the best reverse path the packet check will fail.
       By default failed packets are discarded.
   2 - Loose mode as defined in RFC3704 Loose Reverse Path
       Each incoming packet's source address is also tested against theFIB
       and if the source address is not reachable via any interface
       the packet check will fail.

   Current recommended practice in RFC3704 is to enable strictmode
   to prevent IP spoofing from DDos attacks. If using asymmetricrouting
   or other complicated routing, then loose mode is recommended.

   The max value from conf/{all,interface}/rp_filter is used
   when doing source validation on the {interface}.

   Default value is 0. Note that some distributions enable it
   in startup scripts.

Red Hat are (correctly) setting rp_filter to 1, strictmode. In this case a packet coming in eth0 willhave its source address routed out on the same interface that itcame in on (because that’s the default route). However, a packet coming in on eth1 will have it source addressrouted out on a different interface to the one it came in on and itwill be discarded. Silently.

This is basically asymmetric routing and is quite possibly not whatyou want anyway (it messes up TCP flow control) so there are twoways to fix this: stick with asymmetric routing and permit it orfix the asymmetric routing.

The first one is easiest: in /etc/sysctl.conf change rp_filter=1 torp_filter=2). You’ll need to load that andrestart the network. It’s probably easiest toreboot ? to be sure. I suspect that it was notrestarting enough things that prevented this change from workingbefore.

The second one may be simple as simple as adding those routes thatshould go out on eth1 to the routing table or running some routingdaemon. It depends on your network topology,basically. This would be the preferred solutionif it’s practicable.

reverse-pathfiltering,反向过滤技术,系统在接收到一个IP包后,检查该IP是不是合乎要求,不合要求的IP包会被系统丢弃。该技术就称为rpfilter。怎么样的包才算不合要求呢?例如,用户在A网口上收到一个IP包,检查其IP为B。然后考查:对于B这个IP,在发送时应该用哪个网口,“如果在不应该接收到该包的网口上接收到该IP包,则认为该IP包是hacker行为”。

解决方法:

系统配置文件

  1. /etc/sysctl.conf
    把 net.ipv4.conf.all.rp_filter和net.ipv4.conf.default.rp_filter设为0即可
    net.ipv4.conf.default.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0

net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0

net.ipv4.conf.lo.rp_filter = 0

系统启动后,会自动加载这个配置文件,内核会使用这个变量

  1. 命令行
    显示一个内核变量 sysctl net.ipv4.conf.all.rp_filter
    设置一个内核变量 sysctl -w net.ipv4.conf.all.rp_filter=0
    设置完后,会更新内核(实时的内存)中的变量的值,但不会修改sysctl.conf的值

  2. 使用/proc文件系统
    查看 cat /proc/sys/net/ipv4/conf/all/rp_filter
    设置 echo “0”>/proc/sys/net/ipv4/conf/all/rp_filter

sysctl常用命令

sysctl -a 查看所有参数

sysctl -p 加载配置文件

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: /etc/sysctl.conf 是一个系统配置文件,用于设置内核参数。它包含了一系列的键值对,每个键值对都代表一个内核参数和其对应的值。这些参数可以影响系统的性能、安全性、网络连接等方面。 在 /etc/sysctl.conf 中,每个键值对的格式如下: key = value 其中,key 代表内核参数的名称,value 代表内核参数的值。例如: net.ipv4.tcp_syncookies = 1 这个键值对设置了 TCP SYN cookies 的开启状态。当 value 为 1 时,表示开启;当 value 为 0 时,表示关闭。 除了上述的 TCP SYN cookies,还有很多其他的内核参数可以在 /etc/sysctl.conf 中进行配置,例如: - 网络参数:如 TCP/IP 协议栈的参数、网络连接数限制等。 - 安全参数:如内核安全、文件系统安全等。 - 性能参数:如内存管理、磁盘 I/O 等。 在 /etc/sysctl.conf 中配置这些参数可以优化系统的性能、提高安全性、改善网络连接等方面。但需要注意的是,修改这些参数可能会对系统产生不良影响,因此在修改之前需要仔细考虑和测试。 ### 回答2: /etc/sysctl.conf是Linux系统中的一个配置文件,用于配置系统内核参数,以调整系统的性能和安全性能。通常情况下,所有的运行在Linux系统上的软件和服务都需要依赖于Linux内核的支持,因此对内核参数进行调优,可以提高系统的稳定性和性能。 在/etc/sysctl.conf文件中,每一行都是一项内核参数的配置,每一行的格式为:参数名 = 参数值,其中参数名和参数值之间用等号隔开。下面是一些常用的内核参数及其说明: 1. net.ipv4.tcp_syncookies:表示是否开启TCP SYN Cookie防护。当值为1时代表开启,该功能可以有效防止TCP SYN攻击。 2. vm.swappiness:表示内存使用率达到多少时开始启动交换分区。值越小表示尽可能地使用物理内存,值越大则表示更倾向于使用交换分区。 3. kernel.sysrq:按下ALT+SysRq时的行为。其中0表示禁止,1表示允许SysRq输出,2表示Silently continues等等。 4. fs.file-max:表示系统中最多能打开多少个文件句柄。 5. net.ipv4.ip_forward:表示是否开启IP转发功能。当值为1时代表开启,在路由器或网关中需要开启此功能。 6. net.ipv4.conf.all.accept_redirects:表示是否允许接收重定向数据包,默认为1,建议关闭。 在修改完/etc/sysctl.conf文件之后,需要执行以下命令使其生效: sysctl -p 此命令会读取修改后的/etc/sysctl.conf文件并且使其生效。需要注意的是,不能随意修改内核参数,否则可能会导致系统崩溃或出现其他严重问题。建议在修改之前,先进行系统备份,并且谨慎地调整参数。 ### 回答3: /etc/sysctl.conf是Linux系统中一个非常重要的配置文件,它可以控制系统的一些参数和设置,可以帮助我们优化系统的性能,提高系统的安全性和稳定性。下面就是/etc/sysctl.conf配置文件的详解。 1. 参数说明 # 最大端口范围 net.ipv4.ip_local_port_range = 1024 65535 # 允许本机IP伪装 net.ipv4.conf.all.accept_source_route = 0 # 禁止ICMP重定向 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 # 开启SYN Cookies,防止TCP SYN攻击 net.ipv4.tcp_syncookies = 1 # 禁止IP源路由 net.ipv4.conf.all.rp_filter = 1 # 增加系统最大文件打开数 fs.file-max = 65535 # 增加网络最大连接数 net.ipv4.tcp_max_syn_backlog = 1024 net.core.somaxconn = 1024 # 改善网络吞吐量 net.core.netdev_max_backlog = 5000 net.ipv4.tcp_wmem = 4096 65536 131072 net.ipv4.tcp_rmem = 4096 87380 174760 net.core.optmem_max = 81920 2. 参数解释 以上是一些常用的在/etc/sysctl.conf里面设置的参数,下面逐个进行解释: (1). net.ipv4.ip_local_port_range 这个参数表示本地TCP/UDP端口的范围,如设置1024 65535,则本地TCP/UDP端口可以从1024开始,到65535结束,大约有64000个端口可以使用。 (2). net.ipv4.conf.all.accept_source_route 该参数表示是否允许本机接收IP伪装的数据包,设置为0则关闭。 (3). net.ipv4.conf.all.accept_redirects 该参数表示是否接收ICMP重定向数据包,设置为0防止被攻击者通过ICMP重定向攻击来伪造路由表。 (4). net.ipv4.tcp_syncookies 该参数表示是否开启TCP SYN Cookies,开启此选项可以帮助防止SYN攻击。 (5). net.ipv4.conf.all.rp_filter 该参数表示是否允许IP源路由,设置为1则关闭。 (6). fs.file-max 该参数表示系统可以打开的最大文件数量,通常调整到65535。 (7). net.ipv4.tcp_max_syn_backlog和net.core.somaxconn 这两个参数用于调整系统的最大连接数,net.ipv4.tcp_max_syn_backlog代表TCP连接请求的队列长度,net.core.somaxconn用来设定最大积压的连接数,通常设置为1024。 (8). net.core.netdev_max_backlog 该参数用于增加网络中队列的最大长度,使得网络中的吞吐量更高。 (9). net.ipv4.tcp_wmem和net.ipv4.tcp_rmem 这两个参数用于调节TCP连接的发送缓存和接收缓存,默认缓存值分别为87380和174760,通常使用较大值来优化网络吞吐量。 (10). net.core.optmem_max 该参数用于调整内核和用户空间交互的最大缓存空间,通常设置为适当的值可以提高网络吞吐量。 3. 总结 /etc/sysctl.conf是一个非常重要的系统配置文件,它能够帮助我们优化系统的性能,提高系统的安全性和稳定性。因此,我们需要适当地调整一些参数来满足我们的需求,提高系统的运行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值