centos6

/etc/sysctl.conf

centos7

cat /root/chushihua-centos7.x/sysctl.conf >> /etc/sysctl.d/90-override.conf

sysctl -p /etc/sysctl.d/90-override.conf

或者/usr/lib/sysctl.d/50-default.conf


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
## 不充当路由器
#0,表示禁止数据包转发,1表示允许
net.ipv4.ip_forward = 0

#-------------------华丽的分割线--------------
# rp_filter用于实现反向过滤技术
# 0 - No source validation.
# 1 - Strict mode as defined in RFC3704 Strict Reverse Path
# Each incoming packet is tested against the FIB and if the interface
# is not the best reverse path the packet check will fail.
# By default failed packets are discarded. 默认情况下,丢弃失败的数据包。
#RFC3704中定义的严格模式严格反向路径每个传入数据包都针对FIB进行测试,如果接口不是最佳反向路径,则数据包检查将失败。
# 2 - Loose mode as defined in RFC3704 Loose Reverse Path
# Each incoming packet's source address is also tested against the FIB
# and if the source address is not reachable via any interface
# the packet check will fail.
# RFC3704中定义的松散模式宽松反向路径每个传入数据包的源地址还针对FIB进行测试,如果源地址无法通过任何接口访问,则数据包检查将失败。
# Current recommended practice in RFC3704 is to enable strict mode
# to prevent IP spoofing from DDos attacks. If using asymmetric routing
# or other complicated routing, then loose mode is recommended.
#RFC3704中的当前推荐做法是启用严格模式以防止DDoS攻击的IP欺骗。 如果使用非对称路由或其他复杂路由,建议使用松散模式。
#The default value is 0, but note that some distributions enable it in startup scripts.
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

#-------------------华丽的分割线--------------
# 多网卡接收多播 arp_filter
#0 - (default) The kernel can respond to ARP requests with addresses from other interfaces. This may seem wrong but it usually makes sense, because it increases the chance of successful communication. IP addresses are owned by the complete host on Linux, not by particular interfaces. Only for more complex setups like load-balancing, does this behaviour cause problems.
#1 - Allows you to have multiple network interfaces on the same subnet, and have the ARPs for each interface be answered based on whether or not the kernel would route a packet from the ARP'd IP out that interface (therefore you must use source based routing for this to work). In other words it allows control of which cards (usually 1) will respond to an ARP request.
#arp_filter for the interface will be enabled if at least one of conf/{all,interface}/arp_filter is set to 1, it will be disabled otherwise.
net.ipv4.conf.all.arp_filter = 1

#-------------------华丽的分割线--------------
# Do not accept source routing
# 处理无源路由的包
#Accept packets with SRR option.
#conf/all/accept_source_route must also be set to 1 to accept packets with SRR option on the interface.
#Default: 1 (router), 0 (host).

net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

#-------------------华丽的分割线--------------
# Controls the System Request debugging functionality of the kernel
#SysRq 经常被称为 Magic System Request,它被定义为一系列按键组合。之所以说它神奇,是因为它在系统挂起,大多数服务已无法响应的情况下,还能通过按键组合来完成一系列预先定义的系统操作。通过它,不但可以在保证磁盘数据安全的情况下重启一台挂起的服务器,避免数据丢失和重启后长时间的文件系统检查,还可以收集包括系统内存使用,CPU 任务处理,进程运行状态等系统运行信息,甚至还可能在无需重启的情况下挽回一台已经停止响应的服务器。
#0 不启用 SysRq ,1 启用
kernel.sysrq = 0

#-------------------华丽的分割线--------------
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
#当系统中的一些程序在遇到一些错误以及crash时,系统会自动产生core file记录crash时刻系统信息包括内存和寄存器信息,用以程序员日后debug时可以使用。这些错误包括断错误,非法指令,总线错误和用户自己生成的退出信号等等。一般的,core file会在当前文件夹中存放。
kernel.core_uses_pid = 1

#-------------------华丽的分割线--------------
# Controls the use of TCP syncookies
#开启SYN洪水攻击保护
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_syncookies = 1

#-------------------华丽的分割线--------------
# Controls the default maxmimum size of a mesage queue
#该文件指定一个消息队列的最大长度(bytes)缺省设置:16384
kernel.msgmnb = 1073741824

#-------------------华丽的分割线--------------
# Controls the maximum size of a message, in bytes
#该文件指定了从一个进程发送到另一个进程的消息的最大长度(bytes)。进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。
kernel.msgmax = 20480000

#-------------------华丽的分割线--------------
# Controls the maximum shared segment size, in bytes
#该文件表示内核所允许的最大共享内存段的大小(bytes)。
#缺省设置:33554432
#建议设置:物理内存 * 50%
## Oracle-Validated setting for kernel.shmmax is 4398046511104
kernel.shmmax = 4398046511104

#-------------------华丽的分割线--------------

# Controls the maximum number of shared memory segments, in pages
#该文件表示在任何给定时刻,系统上可以使用的共享内存的总量(bytes)。
kernel.shmall = 4294967296

#-------------------华丽的分割线--------------
#该文件指定消息队列标识的最大数目,即系统范围内最大多少个消息队列。缺省设置:16
kernel.msgmni = 4096000

#-------------------华丽的分割线--------------

#for radis
#该文件指定了内核针对内存分配的策略,其值可以是0、1、2。缺省设置:0
#0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
#1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
#2, 表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。
#vm.overcommit_memory = 1

#-------------------华丽的分割线--------------

######## with a 10G NIC, optimized for network paths up to 100ms RTT

# allow testing with buffers up to 64MB
#指定了接收窗口套接字缓冲区大小的最大值,单位是字节。
net.core.rmem_max = 67108864
#指定了发送套接字缓冲区大小的最大值,单位是字节。
net.core.wmem_max = 67108864

#默认的TCP数据发送窗口大小(字节)。
net.core.wmem_default = 11059200

#默认的TCP数据接收窗口大小(字节)。
net.core.rmem_default = 11059200
##表示每个套接字所允许的最大缓冲区的大小。缺省设置:10240
net.core.optmem_max= 2048000


#为自动调优定义每个 socket 使用的内存。第一个值是为 socket 的发送缓冲区分配的最少字节数。第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。
# increase Linux autotuning TCP buffer limit to 32MB
#该文件包含3个整数值,分别是:min,default,max
#Min:为TCP socket预留用于接收/接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。
#Default:为TCP socket预留用于接收/缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem中default的 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的默认值情况下,TCP 窗口大小为65535。
#Max:为TCP socket预留用于接收/缓冲的内存最大值。该值不会影响 net.core.wmem中max的值,

net.ipv4.tcp_wmem = 10240 87380 33554432

#与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值。
net.ipv4.tcp_rmem = 10240 87380 33554432

# recommended default congestion control is htcp 超文本缓冲
###### There seem to be bugs in both bic and cubic for a number of versions of the Linux kernel up to version 2.6.33. We recommend using htcp with older kernels to be safe.
#If cubic and/or htcp are not listed try the following, as most distributions include them as loadable kernel modules:
#要加入开机自启
#/sbin/modprobe tcp_htcp
#/sbin/modprobe tcp_cubic

net.ipv4.tcp_congestion_control=htcp

# recommended for hosts with jumbo frames enabled 开启系统巨型帧
net.ipv4.tcp_mtu_probing=1

# recommended for CentOS7/Debian8 hosts
#net.core.default_qdisc = fq

#On CentOS 5/6 hosts, also add this to /etc/rc.local (where N is the number for your 10G NIC):
#On newer CentOS7 this is no longer needed.
# /sbin/ifconfig ethN txqueuelen 10000
#########################################################

#-------------------华丽的分割线--------------

##########################TIME_WAIT 相关参数
#控制TIME_WAIT总数-(一般缺省是180000)TIME_WAIT 只在主动关闭的一端出现
#系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,time-wait socket 会被立即砍除并且显示警告信息。
#之所以要设定这个限制,纯#粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,
#不过,如果网络条件需要比默认值更多,则可以提高它(或许还要增加内存)。
net.ipv4.tcp_max_tw_buckets = 1440000

#####下面两个参数---如果开启,在NAT环境下会引发问题。 实际的网络情况中 公司家庭网络都走NAT。只能依赖于NAT分享同一个公网IP。
#开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 0

#tcp_timestamps用来支持RTT的来回时间计算。默认打开的 .

#tcp_tw_recycle/tcp_timestamps都开启的条件下,60s内同一源ip主机的socket connect请求中的timestamp必须是递增的,导致部分通过NAT上网client无法正确连接服务器,故障表现为client发出SYN后无法收到server返回 的SYN+ACK,推荐的解决方法是关闭
net.ipv4.tcp_timestamps = 0

##复用TIME_WAIT连接---表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。
#默认为0,表示关闭。如果使用tcp_tw_reuse,请激活tcp_timestamps,否则无效.
net.ipv4.tcp_tw_reuse = 0

## 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间.默认值是 60秒
net.ipv4.tcp_fin_timeout = 5

#################################################
#-------------------华丽的分割线--------------

##使用 Selective ACK﹐它可以用来查找特定的遗失的数据报— 因此有助于快速恢复状态。
#表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段)。
#(对于广域网通信来说这个选项应该启用,但是这会增加对 CPU 的占用。)
net.ipv4.tcp_sack = 1

#-------------------华丽的分割线--------------
###启用转发应答(Forward Acknowledgment),这可以进行有选择应答(SACK)从而减少拥塞情况的发生;这个选项也应该启用。

net.ipv4.tcp_fack = 1

#-------------------华丽的分割线--------------

###启用 RFC 1323 定义的 window scaling;要支持超过 64KB 的窗口,必须启用该值。
net.ipv4.tcp_window_scaling = 1

#-------------------华丽的分割线--------------
#https://cwiki.apache.org/confluence/display/GEODE/Network+Configuration+Best+Practices
#系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。
#之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制,更应该增加这个值(如果增加了内存之后)。
#每个孤儿套接字最多能够吃掉你64K不可交换的内存。
net.ipv4.tcp_max_orphans = 400000

#-------------------华丽的分割线--------------

##指定所能接受SYN同步包的最大客户端数量,即半连接上限
#表示SYN队列的长度,默认为1024,加大队列长度 可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 3240000

##http://www.saunix.cn/1255.html
#服务端所能accept即处理数据的最大客户端数量,即完成连接上限。
#表示socket监听(listen)的backlog上限。什么是backlog呢?backlog就是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog。
#tcp_max_syn_backlog用于指定酒席现场面积允许容纳多少人进来;
#somaxconn用于指定有多少个座位。
###tcp_max_syn_backlog >= somaxconn。
net.core.somaxconn = 655350
################################
#-------------------华丽的分割线--------------

#对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。
net.ipv4.tcp_syn_retries = 1

###表示回应第二个握手包(SYN+ACK包)给客户端IP后,如果收不到第三次握手包(ACK包)后,不进行重试,加快回收“半连接”,不要耗光资源。
#默认为5,表示重发5次,每次等待30~40秒,即“半连接”默认hold住大约180秒。(可以根据上面的 tcp_syn_retries 来决定这个值)
net.ipv4.tcp_synack_retries = 1

#####################
#-------------------华丽的分割线--------------
#确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大这些值(但是要记住,其单位是内存页,而不是字节)。

#该文件包含3个整数值,分别是:low,pressure,high
#low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。(理想情况下,这个值应与指定给 tcp_wmem 的第 2 个值相匹配 - 这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072 * 300 / 4096)。 )
#pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。(理想情况下这个值应该是 TCP 可以使用的总缓冲区大小的最大值 (204800 * 300 / 4096)。 )
#high:允许所有tcp sockets用于排队缓冲数据报的页面量。(如果超过这个值,TCP 连接将被拒绝,这就是为什么不要令其过于保守 (512000 * 300 / 4096) 的原因了。 在这种情况下,提供的价值很大,它能处理很多连接,是所预期的 2.5 倍;或者使现有连接能够传输 2.5 倍的数据。 我的网络里为192000 300000 732000)
#一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
#缺省设置:24576 32768 49152

net.ipv4.tcp_mem = 94500000 915000000 927000000

#-------------------华丽的分割线--------------

#######这33个参数与TCP KeepAlive有关
#意思是如果某个TCP连接在idle 10秒后,内核才发起probe.如果probe 3次(每次5秒)不成功,内核才彻底放弃,认为该连接已失效.
net.ipv4.tcp_keepalive_time = 10
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 5

#-------------------华丽的分割线--------------
#用于向外连接的端口范围
net.ipv4.ip_local_port_range = 1025 65535

#-------------------华丽的分割线--------------
#明确的拥塞通知(英语:Explicit Congestion Notification,简称ECN)
#许多现代产品中的TCP/IP协议已部分支持ECN;但是,大多数产品默认禁用ECN
#0 – 禁用ECN,不发起也不接受
#1 – 启用ECN,当传入连接请求时,并也在传出连接时尝试请求ECN
#2 – (默认)传入连接请求时启用ECN,但不在传出连接上请求ECN
#从2015年6月发布的Linux内核4.1开始,tcp_ecn_fallback机制按RFC 3168中的规定,在ECN被启用(值为1)时默认启用。
#该回退机制在传出连接的初始设置时尝试ECN连接,对没有ECN能力的传输实行良好回退,缓解不支持ECN的主机或防火墙问题。
net.ipv4.tcp_ecn = 0

#-------------------华丽的分割线--------------
###路由緩存刷新頻率,當一個路由失敗後多長時間跳到另一個路由,默認是300seconds
net.ipv4.route.gc_timeout = 100

#-------------------华丽的分割线--------------
#If you ping the broadcast address of a network, all hosts are supposed to respond.
#抵御 DDoS-- This makes for a dandy denial-of-service tool. Set this to 1 to ignore these broadcast messages.
#Ignoring "broadcast pings"
net.ipv4.icmp_echo_ignore_broadcasts = 1

#-------------------华丽的分割线--------------
#"bad error messages" protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

#-------------------华丽的分割线--------------
#禁止Ping,默认是允许ping。-This will advise the kernel to drop any ICMP packets of type 0 (zero)
#net.ipv4.icmp_echo_ignore_all = 1
#-------------------华丽的分割线--------------
#For CentOS5/6
##表示在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.core.netdev_max_backlog = 262144

#-------------------华丽的分割线--------------
#oracle 12cR1 requisite
#内核所能分配到的最大句柄数
fs.file-max = 6815744
#表示设置的信号量,这4个参数内容大小固定。
kernel.sem = 250 32000 100 128
#上面的4个数据分别对应:SEMMSL、SEMMNS、SEMOPM、SEMMNI这四个核心参数,具体含义和配置如下。
#SEMMSL :用于控制每个信号集的最大信号数量。
# Oracle 建议将 SEMMSL 设置为 init.ora 文件(用于 Linux 系统中的所有数据库)中的最大 PROCESS 实例参数的设置值再加上 10 。此外, Oracle 建议将 SEMMSL 的值设置为不少于 100 。
#SEMMNS:用于控制整个 Linux 系统中信号(而不是信号集)的最大数。
# Oracle 建议将 SEMMNS 设置为:系统中每个数据库的 PROCESSES 实例参数设置值的总和,加上最大 PROCESSES 值的两倍,最后根据系统中 Oracle 数据库的数量,每个加 10 。 使用以下计算式来确定在 Linux 系统中可以分配的信号的最大数量。它将是以下两者中较小的一个值:SEMMNS 或 (SEMMSL * SEMMNI)
#SEMOPM: 内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量。semop 系统调用(函数)提供了利用一个 semop 系统调用完成多项信号操作的功能。一个信号集能够拥有每个信号集中最大数量的SEMMSL 信号,因此建议设置 SEMOPM 等于SEMMSL 。
# Oracle 建议将 SEMOPM 的值设置为不少于 100 。
#SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量。
# Oracle 建议将 SEMMNI 的值设置为不少于 100

#内核异步 I/O (KAIO) 请求 最大数量
fs.aio-max-nr = 1048576

#-------------------华丽的分割线--------------
#关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

#-------------------华丽的分割线--------------
##该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。缺省设置:0,禁用Block Debug模式
vm.dirty_background_ratio = 5

#该文件表示如果进程产生的脏数据到达系统整体内存的百分比,此时进程自行把脏数据写回磁盘。
vm.dirty_ratio = 10

#-------------------华丽的分割线--------------
#This file contains the maximum number of memory map areas a process may have. Memory map areas are used as a side-effect of calling malloc, directly by mmap and mprotect, and also when loading shared libraries.
#While most applications need less than a thousand maps, certain programs, particularly malloc debuggers, may consume lots of them, e.g., up to one or two maps per allocation.
#The default value is 65536.
#max_map_count这个参数就是允许一个进程在VMAs(虚拟内存区域)拥有最大数量,VMA是一个连续的虚拟地址空间,当进程创建一个内存映像文件时VMA的地址空间就会增加,当达到max_map_count了就是返回out of memory errors。
vm.max_map_count = 1048575
#-------------------华丽的分割线--------------
##TCP Fast Open(TFO)——一种对TCP协议的扩展,允许在TCP握手期间的TCP-SYN 和TCP-SYN/ACK数据包中夹带数据,这样就减少了一个RTT。
#内核最好升级4.x版本
net.ipv4.tcp_fastopen = 3