Linux内核配置

2021-05-25 17:52:38 浏览数 (1)

  1. #[ip]
  2. #关闭IPV6
  3. net.ipv6.conf.all.disable_ipv6 = 1
  4. net.ipv6.conf.default.disable_ipv6 = 1
  5. #[arp系列],内容太多,详细看http://www.52wiki.cn/docs/jichu/818
  6. #ARP参数,检查一次相邻层记录的有效性的周期。当相邻层记录失效时,将在给它发送数据前,再解析一次。缺省值是60秒。
  7. net.ipv4.neigh.default.gc_stale_time = 120
  8. #定义了对目标地址为本机IP的ARP询问的不同应答模式。
  9. net.ipv4.conf.all.arp_ignore = 1
  10. net.ipv4.conf.default.arp_ignore = 1
  11. net.ipv4.conf.lo.arp_ignore = 1
  12. #定义了对目标地址为本机IP的ARP询问的不同应答模式。
  13. net.ipv4.conf.all.arp_announce = 2
  14. net.ipv4.conf.default.arp_announce = 2
  15. net.ipv4.conf.lo.arp_announce = 2
  16. #忽略icmp ping广播包,应开启,避免放大攻击
  17. net.ipv4.icmp_echo_ignore_broadcasts = 1
  18. #设置它之后,可以忽略由网络中的那些声称回应地址是广播地址的主机生成的ICMP错误。
  19. net.ipv4.icmp_ignore_bogus_error_responses = 1
  20. #路由转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包
  21. net.ipv4.ip_forward = 0
  22. #允许发送重定向消息。(路由使用开启)
  23. net.ipv4.conf.all.send_redirects = 0
  24. #反向过滤技术,系统在接收到一个IP包后,检查该IP是不是合乎要求,不合要求的IP包会被系统丢弃。怎么样的包才算不合要求呢?例如,用户在A网口上收到一个IP包,检查其IP为B。然后考查:对于B这个IP,在发送时应该用哪个网口,“如果在不应该接收到该包的网口上接收到该IP包,则认为该IP包是hacker行为”。
  25. net.ipv4.conf.all.rp_filter = 0
  26. #接收带有SRR选项的数据报。主机设为0,路由设为1
  27. net.ipv4.conf.all.accept_source_route = 0
  28. #[调试信息]
  29. #允许按住Alt PrtSc键打印内核信息,除非是调试,一般要关闭此功能
  30. kernel.sysrq = 0
  31. #Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行错误排查,控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core
  32. kernel.core_uses_pid = 1
  33. #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击。
  34. net.ipv4.tcp_syncookies = 1
  35. #[字节]
  36. #单个消息队列中允许的最大字节长度(限制单个消息队列中所有消息包含的字节数之和)
  37. kernel.msgmnb = 65536
  38. #消息队列中单个消息的最大字节数
  39. kernel.msgmax = 65536
  40. #单个共享内存段的最大值
  41. kernel.shmmax = 68719476736
  42. #系统上可以使用的共享内存的总量(bytes)
  43. kernel.shmall = 4294967296
  44. #将该值设置为 0 可禁用地址空间布局随机化。DB2 数据服务器依赖特定共享内存对象的固定地址,地址空间布局随机化会导致有些活动发生错误
  45. kernel.randomize_va_space = 1
  46. #系统在同时所处理的最大time-wait sockets 数目。如果超过此数的话,time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,不过,如果网络条件需要比默认值更多,则可以提高它(或许还要增加内存)
  47. net.ipv4.tcp_max_tw_buckets = 6000
  48. #启用有选择的应答(1表示启用),通过有选择地应答乱序接收到的报文来提高性能,让发送者只发送丢失的报文段,(对于广域网通信来说)这个选项应该启用,但是会增加对CPU的占用。
  49. net.ipv4.tcp_sack = 1
  50. #启用RFC 1323定义的window scaling,要支持超过64KB的TCP窗口,必须启用该值(1表示启用),TCP窗口最大至1GB,TCP连接双方都启用时才生效。
  51. net.ipv4.tcp_window_scaling = 1
  52. #为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数;第二个值是默认值(该值会被rmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是接收缓冲区空间的最大字节数(该值会被rmem_max覆盖)。
  53. net.ipv4.tcp_rmem = 4096 87380 4194304
  54. #为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数;第二个值是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)。
  55. net.ipv4.tcp_wmem = 4096 16384 4194304
  56. #最大的TCP数据发送窗口(字节)。
  57. net.core.wmem_default = 8388608
  58. #默认的TCP数据接收窗口大小(字节)。
  59. net.core.rmem_default = 8388608
  60. #最大的TCP数据接收窗口(字节)。
  61. net.core.rmem_max = 16777216
  62. #最大的TCP数据发送窗口(字节)。
  63. net.core.wmem_max = 16777216
  64. #在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
  65. net.core.netdev_max_backlog = 262144
  66. #系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值更应该增加这个值(如果增加了内存之后)。
  67. net.ipv4.tcp_max_orphans = 3276800
  68. #TCP连接SYN队列大小
  69. net.ipv4.tcp_max_syn_backlog = 262144
  70. #表示是否启用以一种比超时重发更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;
  71. #某些访问会失效,会导致其在发包时加入时间戳,经过nat之后,如果前面相同的端口被使用 过,且时间戳大于这个链接发出的syn中的时间戳,就会导致在服务器上忽略掉这个syn。表现为用户无法正常完成tcp3次握手。方法是在服务器上禁止
  72. net.ipv4.tcp_timestamps = 0
  73. #对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。
  74. net.ipv4.tcp_synack_retries = 1
  75. #表示本机向外发起TCP SYN连接超时重传的次数,不应该高于255;该值仅仅针对外出的连接。
  76. net.ipv4.tcp_syn_retries = 1
  77. #启用TIME-WAIT状态sockets的快速回收,这个选项不推荐启用。在NAT(Network Address Translation)网络下,会导致大量的TCP连接建立错误。
  78. #详细:https://blog.csdn.net/chengm8/article/details/51668992
  79. net.ipv4.tcp_tw_recycle = 0
  80. #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接
  81. #我们在一些高并发的 WebServer上,为了端口能够快速回收,打开了 tcp_tw_reccycle ,而在关闭 tcp_tw_reccycle 的时候,kernal 是不会检查对端机器的包的时间戳的;打开了 tcp_tw_reccycle 了,就会检查时间戳,很不幸移动的cmwap发来的包的时间戳是乱跳的,所以我方的就把带了“倒退”的时间戳的包当作是“recycle的tw连接的重传数据,不是新的请求”,于是丢掉不回包,造成大量丢包。
  82. net.ipv4.tcp_tw_reuse = 0
  83. #tcp_mem有3个INTEGER变量:low, pressure, high
  84. #low:当TCP使用了低于该值的内存页面数时,TCP没有内存压力,TCP不会考虑释放内存。(理想情况下,这个值应与指定给tcp_wmem的第2个值相匹配。这第2个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072*300/4096)
  85. #pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是TCP可以使用的总缓冲区大小的最大值(204800*300/4096)
  86. #high:允许所有TCP Sockets用于排队缓冲数据报的页面量。如果超过这个值,TCP连接将被拒绝,这就是为什么不要令其过于保守(512000*300/4096)的原因了。在这种情况下,提供的价值很大,它能处理很多连接,是所预期的2.5倍;或者使现有连接能够传输2.5倍的数据。
  87. #一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
  88. net.ipv4.tcp_mem = 94500000 915000000 927000000
  89. #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
  90. net.ipv4.tcp_fin_timeout = 1
  91. #当keepalive起用的时候,TCP发送keepalive消息的频度。
  92. net.ipv4.tcp_keepalive_time = 1800
  93. #在认定连接失效之前,发送多少个TCP的keepalive探测包。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应
  94. net.ipv4.tcp_keepalive_probes = 3
  95. #当探测没有确认时,重新发送探测的频度。
  96. net.ipv4.tcp_keepalive_intvl = 15
  97. # 用于向外连接的端口范围,,注意是本地向外连接,不是这台机器的所有连接,不会影响这台机器的 80端口的对外连接数。但这个数字会影响到代理服务器(nginx)对app服务器的最大连接数,因为nginx对app是用的异步传输,所以这个环节的 连接速度很快,所以堆积的连接就很少。假如nginx对app服务器之间的带宽出了问题或是app服务器有问题,那么可能使连接堆积起来,这时可以通过设 定nginx的代理超时时间,来使连接尽快释放掉,一般来说极少能用到28232个连接。
  98. net.ipv4.ip_local_port_range = 1024 65000
  99. #收发接收ICMP重定向消息。
  100. #当网关接收到来自所接网络主机的Internet数据报时,网关可以发送重定向信息到一台主机。网关检查路由表获得下一个网关的地址,第二个网关将数据报路由到目标网络。
  101. net.ipv4.conf.all.accept_redirects = 0
  102. #收发接收ICMP重定向消息。
  103. #当网关接收到来自所接网络主机的Internet数据报时,网关可以发送重定向信息到一台主机。网关检查路由表获得下一个网关的地址,第二个网关将数据报路由到目标网络。
  104. net.ipv4.conf.default.accept_redirects = 0
  105. #仅仅接收发给默认网关列表中网关的ICMP重定向消息
  106. net.ipv4.conf.all.secure_redirects = 0
  107. #仅仅接收发给默认网关列表中网关的ICMP重定向消息
  108. net.ipv4.conf.default.secure_redirects = 0
  109. #该值越高则linux越倾向于将部分长期没有用到的页swap,即便有足够空余物理内存(1~100)
  110. vm.swappiness = 10
  111. #系统发生panic时内核重新引导之前的等待时间
  112. kernel.panic = 5
  113. #系统中所有进程能够同时打开的文件句柄数量(系统级别)
  114. fs.file-max = 165535
  115. #当前正在使用的拥塞控制算法.
  116. net.ipv4.tcp_congestion_control = hybla
  117. # 是否允许内存的过量分配,允许进程分配比它实际使用的更多的内存。
  118. #0 — 默认设置。内核执行启发式内存过量使用处理,方法是估算可用内存量,并拒绝明显无效的请求。遗憾的是因为内存是使用启发式而非准确算法计算进行部署,这个设置有时可能会造成系统中的可用内存超载。
  119. #1 — 内核执行无内存过量使用处理。使用这个设置会增大内存超载的可能性,但也可以增强大量使用内存任务的性能。
  120. #2 — 内存拒绝等于或者大于总可用 swap 大小以及 overcommit_ratio 指定的物理 RAM 比例的内存请求。如果您希望减小内存过度使用的风险,这个设置就是最好的
  121. vm.overcommit_memory = 1
  122. #这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外存);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
  123. vm.dirty_ratio = 1
  124. #为0则表示最大限度使用物理内存,然后才是swap。
  125. #为100表示积极使用swap,并把内存中数据及时放到swap中。
  126. #默认60,使用60%物理内存后,会尽量放到swap。
  127. vm.swappiness = 10
  128. #增大这个参数设置了虚拟内存回收directory和i-node缓冲的倾向,这个值越大。越易回收
  129. vm.vfs_cache_pressure = 110
  130. #这个参数指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存
  131. vm.dirty_background_ratio = 1
  132. #设置flusher内核线程唤醒的间隔,此线程用于将脏页回写到磁盘,单位是百分之一秒 如果系统要求稳定持续的写,可以适当降低该值,把峰值的写操作平均多次,也避免宕机丢失更多的数据
  133. vm.dirty_writeback_centisecs = 100
  134. #脏数据的过期时间,超过该时间后内核的flusher线程被唤醒时会将脏数据回写到磁盘上,单位是百分之一秒。如果系统写操作压力很大,可以适当减小该值,但也不要太小
  135. vm.dirty_expire_centisecs = 100
  136. #定义了一个进程能拥有的最多的内存区域
  137. vm.max_map_count = 655360

0 人点赞