编辑 vi /etc/sysctl.conf
立即生效 /sbin/sysctl -p
内容如下:
#接收套接字缓冲区大小的默认值(以字节为单位)。
net.core.rmem_default = 262144
#接收套接字缓冲区大小的最大值(以字节为单位)。
net.core.rmem_max = 16777216
#发送套接字缓冲区大小的默认值(以字节为单位)。
net.core.wmem_default = 262144
#发送套接字缓冲区大小的最大值(以字节为单位)。
net.core.wmem_max = 16777216
#用来限制监听(LISTEN)队列最大数据包的数量,超过这个数量就会导致链接超时或者触发重传机制,大于65536会报错。
net.core.somaxconn = 65535
#当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。
net.core.netdev_max_backlog = 262144
#表示系统中最多有多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这里设置的数字,连接就会复位并输出警告信息。这个限制仅仅是为了防止简单的DoS攻击。此值不能太小,更应该增加这个值(如果增加了内存之后)。
net.ipv4.tcp_max_orphans = 262144
#表示那些尚未收到客户端确认信息的连接(SYN消息)队列的长度,默认为1024,加大队列长度为262144,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 262144
#表示系统同时保持TIME_WAIT套接字的最大数量。如果超过此数,TIME_WAIT套接字会被立刻清除并且打印警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的DoS攻击,不过,过多的TIME_WAIT套接字也会消耗服务器资源,甚至死机。
net.ipv4.tcp_max_tw_buckets = 10000
#表示允许系统打开的端口范围。
net.ipv4.ip_local_port_range = 1024 65500
#以下两参数可解决生产场景中大量连接的服务器中TIME_WAIT过多问题。
#表示开启TCP连接中TIME_WAIT套接字的快速回收,默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 1
#表示允许重用TIME_WAIT状态的套接字用于新的TCP连接,默认为0,表示关闭。
net.ipv4.tcp_tw_reuse = 1
#当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭。
net.ipv4.tcp_syncookies = 1
#表示系统允许SYN连接的重试次数。为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK包。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_synack_retries = 1
#表示在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_syn_retries = 1
#减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。
net.ipv4.tcp_fin_timeout = 30
#这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,若将其设置得小一些,可以更快地清理无效的连接。
net.ipv4.tcp_keepalive_time = 30
#探测消息未获得响应时,重发该消息的间隔时间(秒)。系统默认75秒。
net.ipv4.tcp_keepalive_intvl = 15
#在认定连接失效之前,发送多少个TCP的keepalive探测包。系统默认值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive探测包之后可以有多少时间没有回应。
net.ipv4.tcp_keepalive_probes = 3
#确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。示例中第一个值为786432*4/1024/1024=3G,第二个值为1048576*4/1024/1024=4G,第三个值为1572864*4/1024/1024=6G。
net.ipv4.tcp_mem = 786432 1048576 1572864
#此参数限制并发未完成的异步请求数目,应该设置避免I/O子系统故障。
fs.aio-max-nr = 1048576
# 该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中内核可以打开的文件的数量。
fs.file-max = 6815744
# 单个进程可分配的最大文件数
fs.nr_open = 6815744
#第一列,表示每个信号集中的最大信号量数目。
#第二列,表示系统范围内的最大信号量总数目。
#第三列,表示每个信号发生时的最大系统操作数目。
#第四列,表示系统范围内的最大信号集总数目。
#(第一列)*(第四列)=(第二列)
# 256 *
kernel.sem = 250 1024000 100 4096
#表示尽量使用内存,减少使用磁盘swap交换分区,内存速度明显高于磁盘一个数量级。linux的基本默认设置为60,你的内存在使用到100-60=40%的时候,就开始出现有交换分区的使用。
vm.swappiness = 1
# 同步刷脏页,会阻塞应用程序。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 10。单位是百分比
vm.dirty_ratio = 10
#异步刷脏页,不会阻塞应用程序。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 5。 单位是百分比
vm.dirty_background_ratio = 5
#Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建议设置为 1500,也就是15秒算旧。单位是 1/100秒
vm.dirty_expire_centisecs = 500
#控制内核的脏数据刷新进程pdflush的运行间隔。降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。单位是 1/100秒
vm.vfs_cache_pressure = 500
#每个消息队列的大小(单位:字节)限制
kernel.msgmnb = 65536
#整个系统最大消息队列数量限制,进程间的消息传递是在内核的内存中进行的,不会交换到磁盘上,所以如果增加该值,则将增加操作系统所使用的内存数量。
kernel.msgmax = 65536
#单个共享内存段的大小(单位:字节)限制,计算公式64G*1024*1024*1024(字节),
kernel.shmmax = 68719476736
#所有内存大小(单位:页,1页 = 4Kb),计算公式16G*1024*1024*1024/4KB(页) 2*, <缺省系统页中的 RAM 大小 >
kernel.shmall = 4294967296
# 允许更多的PIDs (减少滚动翻转问题); may break some programs 32768
kernel.pid_max = 65536
# 该文件指定消息队列标识的最大数目,即系统范围内最大多少个消息队列。1 024 *
kernel.msgmni=16384
# 该文件表示用于整个系统的共享内存段的最大数目(个)。256 *
kernel.shmmni=4096
#避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts=1
#开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses=1
#处理无源路由的包
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
#它可以用来查找特定的遗失的数据报— 因此有助于快速恢复状态
net.ipv4.tcp_sack=1
#打开FACK拥塞避免和快速重传功能。(注意,当tcp_sack设置为0的时候,这个值即使设置为1也无效)
net.ipv4.tcp_fack = 1
#允许TCP发送”两个完全相同”的SACK。
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_window_scaling=1
# 增加TCP最大缓冲区大小
net.ipv4.tcp_rmem=4096 87380 4194304
net.ipv4.tcp_wmem=4096 16384 4194304
# 开启并记录欺骗,源路由和重定向包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
#ASLR是一种保护缓冲区溢出攻击的防御技术,通过增加内存攻击(如return-into-libc或ROP)预测目标地址的难度阻碍其实施攻击。0,表示没有随机化,所有都是静态的;若输出为1,表示保守随机化,共享库、栈、mmap(),VDSO以及堆都被随机化;若输出为2,表示全随机化,在1的基础上,增加了通过brk()方式内存管理的随机化。
kernel.randomize_va_space = 2
#本端试图关闭TCP连接之前重试多少次。缺省值是7,相当于50秒~16分钟(取决于RTO)。如果你的机器是一个重载的WEB服务器,你应该考虑减低这个值,因为这样的套接字会消耗很多重要的资源。(net.ipv4.tcp_orphan_retries = 0并不是想像中的不重试)
net.ipv4.tcp_orphan_retries=3
#活动TCP连接重传次数,超过次数视为掉线,放弃连接。缺省值:15,建议设为 2或者3.
net.ipv4.tcp_retries2=3
----------------------------------------------
查看当前TCP连接的状态和对应的连接数量:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
其它参考:
https://blog.csdn.net/JackLiu16/article/details/80169030 #sysctl.conf文件内核设置参数详解
https://blog.csdn.net/ygl23/article/details/84065026 #linux内核优化,内核参数详解
https://blog.csdn.net/ygl23/article/details/84062731 #查看、修改linux系统的最大链接数限制、文件描述符限制(limits.conf)
https://blog.csdn.net/tenfyguo/article/details/50185915 #Swap调优
https://blog.csdn.net/qq_34924407/article/details/80572564 #centos7 调优说明
https://www.ibm.com/support/knowledgecenter/zh/SSEPGG_11.1.0/com.ibm.db2.luw.qb.server.doc/doc/t0008238.html #用于 Db2 数据库服务器安装的内核参数