https://zhouxx.blog.csdn.net/article/details/140168148
在写上面《科普:Linux服务器性能调优概述》这篇文章时,由于篇幅限制,将一些内核参数单独分离出来。
内核参数文件位置:/etc/sysctrl.conf
内核更改和有效命令:sysctl
sysctl -a #列出所有内核参数及其当前值
sysctl kernel.parameter_name #显示特定参数的值
sysctl -w 参数名称=新值#暂时更改参数值,但重启后恢复为默认值
修改/etc/sysctl.conf文件以永久更改参数值,并使用sysctl -p命令使更改生效。
sysctl -p #更新配置文件
Linux 内核参数详解-VM
vm.percpu_pagelist_fraction=0 vm.max_queue_Depth=0 vm.oom-kill=1 vm.legacy_va_layout=0
该文件指示是否使用Linux支持的最新32位共享内存mmap()系统调用。包含mmap()、posix 和系统VIPC。
0,使用最新的32 进行mmap() 系统调用。
1、使用2.4内核提供的系统调用。
默认值:0
vm.vfs_cache_Pressure=100
该文件表明内核回收用于目录和索引节点缓存的内存的趋势。默认值100 意味着将该值降低到100 以下会导致内核根据页面缓存和交换缓存以合理的速率维护目录和inode 缓存。内核倾向于维护目录和索引节点缓存,当您将此值增加到100 以上时,内核倾向于重用目录和索引节点缓存。默认值:100
vm.block_dump=0
该文件指示块调试模式是否打开,用于记录所有读取和写入以及脏块写回操作。默认值:0 禁用阻止Bebug 模式。
vm.laptop_mode=0
如果返回值为0。表明系统尚未处于笔记本电脑模式。如果返回任何其他正值,则系统成功进入笔记本电脑模式。
vm.max_map_count=65536
该文件允许您使用max_map_count 限制虚拟内存量。
vm.min_free_kbytes=102400
此文件指示Linux VM 强制保留的最小可用内存量(以KB 为单位)。
vm.lower_zone_protection=0
vm.hugetlb_shm_group=0
该文件代表系统组ID,允许您使用Hugetlb 页创建系统VIPC 共享内存段。
vm.nr_hugepages=0
该文件表示系统保留的hugetlb页数。
虚拟机交换性=60
减少系统上的频繁交换写入可加快应用程序之间的切换并提高系统性能。默认值为60。
vm.nr_pdflush_threads=2
该文件显示当前正在运行的pdflush 进程的数量。当I/O 负载较高时,内核会自动添加pdflush 进程。 默认设置:2(只读)
vm.dirty_expire_centisecs=3000
该文件表明,如果丢弃的数据在内存中保留的时间超过该值,pdflush进程下次会将其写回磁盘。
vm.dirty_writeback_centisecs=500
该文件指示pdflush 进程定期将无用数据写回磁盘的频率。默认值:500(1/100 秒)
vm.dirty_ratio=40
该文件显示进程达到系统总内存时产生的无用数据的百分比。那时,该进程可以放心地将无用数据写回磁盘。 默认值:40。
vm.dirty_background_ratio=10
该文件表示无用数据已达到系统总内存的百分比。此时会触发pdflush进程,将无用数据写回磁盘。默认设置:10
vm.page-cluster=3
该文件指示写入交换空间时写入的页数。 0 表示1 页,1 表示2 页,2 表示4 页。默认值为3(2 的3 次方,8 页)。
vm.overcommit_ratio=50
该文档指出,当overcommit_memory=2 时,可过量使用的内存百分比是通过使用以下公式计算系统上可用内存总量来计算的: 系统可分配内存=交换空间+ 物理内存* overcommit_ratio/100。
vm.overcommit_memory=0
该文件指定内核的内存分配策略,值为0、1或2。
0 表示内存检查是否有足够的内存可供应用程序进程使用。如果有足够的内存,则允许内存申请。否则,内存申请将会失败,并向申请进程返回错误。
1 表示内存允许所有物理内存分配,无论当前内存状态如何。
2 表示内核可以分配的内存多于所有物理内存和交换空间的总和。 (参见“overcommit_ratio”)。
Linux 内核参数详解-TCP
tcp_syn_retries:整数
默认值为5
对于一个新的连接,内核必须发送多少个SYN连接请求才能决定放弃它?不能超过255。默认值为5,相当于大约180 秒。 (对于负载高、物理通信良好的网络,该值较高,可改为2。该值仅适用于外部连接。对于传入连接,由tcp_retries1决定。)
tcp_synack_retries:整数
默认值为5
对于远程连接请求SYN,内核会发送SYN + ACK 数据报以确认收到先前的SYN 连接请求数据包。这是所谓的三向握手机制的第二步。这决定了内核在放弃连接之前发送的SYN+ACK 的数量。不能超过255。默认值为5,相当于大约180 秒。 (这个值可以根据上面的tcp_syn_retries来确定)
tcp_keepalive_time:整数
默认值为7200(2 小时)。
如果打开保活,TCP 发送保活消息的频率。 (由于目前的网络攻击等因素,利用此进行的攻击非常频繁。) CU的一些朋友在使用之前有人说过,如果不进行空连接攻击,持续时间只有2秒?我个人在运行NAT服务时将tcp_keepalive_time值更改为1800秒。
tcp_keepalive_probes:整数
默认值为9
TCP 发送保活探测以确定连接断开的次数。 (注意, Keep Connection只有在SO_KEEPALIVE套接字选项打开时才会发送。次数是默认的,不需要更改。当然,这个值可以根据你的情况适当缩短。)将其设置为5 更好)。
tcp_keepalive_intvl:整数
默认值为75
将探测消息的频率乘以tcp_keepalive_probes 可以让您有时间终止自探测启动以来未响应的连接。默认值为75 秒。这意味着非活动连接将在大约11 分钟后断开。 (对于常规应用程序,这个值有点太高了,所以如果需要的话可以减小它。特别是对于Web服务器,你应该减小这个值,15是一个更好的值。)
tcp_retries1:整数
默认值为3
放弃响应TCP 连接请求之前所需的重试次数。 RFC 指定最小值为3,这也是默认值。根据RTO值,这大约在3秒到8分钟之间。 (请注意,值: 还确定传入的syn 连接)
tcp_retries2:整数
默认值为15
丢弃活动(已建立的通信状态)TCP 连接之前所需的重试次数。默认值为15,由RTO 值决定。这对应于13到30分钟(RFC1122指定它必须大于100秒)(这个值可以根据您当前的网络配置适当更改)。在我的网络上更改为5)
tcp_orphan_retries:整数
默认值为7
近端放弃TCP 连接之前的重试次数。默认值为7,对应于50 秒到16 分钟,具体取决于RTO。如果您的系统是负载较重的Web 服务器,则可能需要降低此值,因为此类套接字会消耗大量资源。另请参见tcp_max_orphans。 (其实做NAT的时候降低这个值也有显着的好处;在我自己的网络环境下,我把这个值降低到了3)
tcp_fin_timeout:整数
默认值为60
对于被本地端丢弃的套接字连接,TCP 保持在FIN-WAIT-2 状态的时间量。对方可能会断开连接,连接可能不会终止,或者进程可能会意外终止。默认值为60 秒。对于2.2 内核,该时间为180 秒。您可以设置此值,但请注意,在负载较重的Web 服务器上,您可能会面临内存被大量无效数据报填满的风险。 FIN-WAIT-2 套接字的危险性低于FIN-。 WAIT-1仅消耗约1.5K内存,因此它存在的时间更长。另请参见tcp_max_orphans。 (事实上,在做NAT时降低这个值也有显着的好处;在我自己的网络环境中,我将该值降低到30)
tcp_max_tw_buckets:整数
默认值为180000
系统将同时处理的timewait 套接字的最大数量。如果超过此数量,等待时间的套接字将立即被删除,并显示警告消息。设置此限制的唯一原因是防止简单的DoS 攻击。但是,如果您的网络条件需要超过默认值,您可以增加限制(并可能增加内存)。 (实际中如果进行NAT最好适当增大该值)
tcp_tw_recycle:布尔值
默认值为0
打开快速TIME-WAIT 套接字回收。除非技术专家建议或要求,否则请勿更改此值。 (使用NAT时建议开启)
tcp_tw_reuse:布尔值
默认值为0
该文件指示是否应允许将处于TIME-WAIT状态的套接字重新用于新的TCP连接(这意味着某些服务可以快速重新启动并且启动后端口已在使用中)。
tcp_max_orphans:整数
默认值为8192
系统可以处理的不属于任何进程的TCP 套接字的最大数量。如果超过此数量,不属于任何进程的连接将立即重置并显示警告消息。此限制仅用于防止简单的DoS 攻击。不要依赖或人为降低此限制(在Redhat AS 版本中此值设置为32768,但如果进行了多次防火墙更改,建议使用此值)。 (2000年修订)
tcp_abort_on_overflow:布尔值
默认值为0
如果守护进程太忙而无法接受新的连接,就好像对方发送了一条重置消息。默认值为false。这意味着如果溢出是由于意外突发造成的,连接将恢复到状态。由于此选项会影响客户的使用,因此只有在确定守护程序实际上无法完成连接请求时才应打开此选项。 (当处理sendmail或Apache等已经满载的服务时,这允许客户端立即终止连接,并给服务程序一个缓冲机会来处理现有的连接,因此防火墙建议启用此功能)
tcp_syncookies:布尔值
默认值为0
仅当编译内核时选择CONFIG_SYNCOOKIES 时,此选项才会生效。当syn等待队列溢出时,会向对端发送一个synccookie。目的是防止Syn Flood攻击。
注意:请勿在未受到攻击的负载较重的服务器上使用此选项。如果您在日志中看到synflood 消息,并且您的调查显示您没有遇到synflood 攻击,但合法用户的连接负载过高,请不要使用此选项。应调整其他参数以提高服务器性能。第:章
tcp_max_syn_backlogtcp_synack_retriescp_abort_on_overflow
synccookie 严重违反了TCP 协议,并且不允许使用TCP 扩展,这会对某些服务(例如SMTP 转发)产生重大性能影响。 (请注意,此实现与BSD 中使用的TCP 代理相同。这违反了TCP 连接的RFC 3 次握手实现,但它在防止syn-flood 方面肯定非常有效。)
tcp_stdurg:布尔值
默认值为0
将主机请求解释函数与TCP urg 指针字段结合使用。大多数主机使用较旧的BSD 解释,在Linux 上打开时可能无法正常通信。
tcp_max_syn_backlog:整数
尚未被客户端确认的连接请求应排队的最大数量。对于内存大于128MB 的系统,默认值为1024;对于内存小于128MB 的系统,默认值为128。如果您的服务器经常过载,请尝试增加此数字。请注意!如果将此值设置为高于1024,最好更改include/net/tcp.h中的TCP_SYNQ_HSIZE以保留TCP_SYNQ_HSIZE*16=tcp_max_syn_backlog并将其编译到核心中。 (SYN Flood攻击利用TCP协议中的缺陷传播握手,伪造虚假源IP地址,向目标系统发送大量TCP-SYN半开连接,导致系统耗尽socket队列资源,无法为了对抗这种攻击,现代Unix 系统通常使用多连接队列处理来处理普通的完全连接的应用程序(Connect)。单独保存半开连接。将这种双队列处理方式与其他系统内核对策(如Syn-Cookies/caching)相结合,可以有效缓解小问题。 SYN 洪水攻击(1000p/s)。服务器可能会考虑增加该值,因为SYN队列长度可以容纳更多等待连接的网络连接。 )
tcp_window_scaling:整数
默认值为1
该文件指示TCP/IP 会话的滑动窗口大小是否可变。参数值是一个布尔值,其中1表示可变,0表示不可变。通常,TCP/IP 使用的窗口最大可以达到65535 字节,但是此时启用此功能可以使TCP/IP 滑动窗口大小增加数倍。这提高了数据传输能力(RFC 1323)。 (对于典型的100M 网络,关闭它可以减少开销,因此如果您的网络不是高速网络,请考虑将其设置为0。)
tcp_timestamps:布尔值
默认值为1
时间戳还用于其他目的,以防止序列号伪造。在1G 宽带线路上,可能会遇到具有外线值的过时序列号(如果它们是最后生成的)。时间戳告诉我们这是一个“旧数据包”。 (本文档指出是否启用比超时重传(RFC 1323)更准确的RTT计算。应启用该选项以提高性能。)
tcp_sack:布尔值
默认值为1
选择性ACK 允许您找到丢失的特定数据报,从而使您能够快速恢复状态。该文件指示是否启用选择性确认。选择性确认可以通过有选择地确认按顺序接收到的消息(允许发送方仅发送丢失的段)来提高性能。 (必须启用此选项才能进行WAN 通信,但会增加CPU 使用率。)
tcp_fack:布尔值
默认值为1
FACK 打开拥塞避免和快速重传。 (请注意,如果tcp_sack 设置为0,则即使设置为1,该值也没有效果。)
tcp_dsack:布尔值
默认值为1
允许TCP 发送“两个相同的”SACK。
tcp_ecn:布尔值
默认值为0
打开TCP 直接拥塞通知功能。
tcp_reordering:整数
默认值为3
TCP 流中重新排序的数据报的最大数量。 (通常,我们建议将此值调整得稍高一些,例如5。)
tcp_retrans_collapse:布尔值
默认值为1
为一些有问题的打印机提供错误兼容性。 (通常不需要此支持,可以将其关闭。)
tcp_wmem(三个整数变量):最小值、默认值、最大值
min:为TCP 套接字保留用于发送缓冲区的最小内存量。每个TCP 套接字在被提议后就可供使用。默认值为4096 (4K)。
默认值:为TCP 套接字的发送缓冲区保留的内存量。默认情况下,该值会影响其他协议使用的net.core.wmem_default 值,并且通常低于net.core.wmem_default 值。默认值为16384 (16K)。
max: 用于TCP 套接字发送缓冲的最大内存。该值不会影响net.core.wmem_max 并且“静态”选择参数SO_SNDBUF 不受该值影响。默认值为131072 (128K)。 (对于服务器来说,增大这个参数的值对于数据传输可以有很大的帮助,在我的网络环境下,变为51200 131072 204800)
tcp_rmem(三个整数变量):最小值、默认值、最大值
min:TCP 套接字上为接收缓冲区保留的内存量。即使内存不足,TCP 套接字也至少会为接收缓冲区保留此内存量。
默认值:为TCP 套接字接收缓冲区保留的内存量。默认情况下,该值会影响其他协议使用的net.core.wmem_default 值。该值决定了tcp_adv_win_scale、tcp_app_win、tcp_app_win=0默认值下TCP窗口大小为65535。默认值为87380。
max:用于TCP 套接字接收缓冲的最大内存大小。该值不会影响net.core.wmem_max,并且“静态”可选参数SO_SNDBUF也不受该值影响。默认值为128K。默认值为87380*2 字节。 (您可以看到,max 设置最好是默认值的两倍。对于NAT,您需要增加它。在我的网络中,它是51200 131072 204800)
tcp_mem(3 个整数变量):低、压力、高
low:如果TCP使用的内存页少于该值,则TCP不会考虑释放内存。 (理想情况下,该值应与分配给tcp_wmem 的第二个值匹配,该值是最大页面大小乘以最大并发请求数除以页面大小。)(131072 * 300/4096)
压力:如果TCP 使用的内存页多于该值,则TCP 会尝试稳定内存使用量,如果内存消耗小于较低值,则退出压力状态。 (理想情况下,该值应该是TCP 可以使用的最大总缓冲区大小(204800 * 300/4096)。)
high:所有TCP 套接字可用于排队和缓冲数据报的页面数量。 (如果超过这个值,TCP连接将被拒绝,所以不要选择太保守的值(512000 * 300/4096)。在这种情况下,指定的值很大,可以处理很多连接,这会能够发送比预期多2.5 倍的数据,或者在现有连接上发送多2.5 倍的数据(我的网络中为192000 300000 732000)。
通常,这些值是根据系统启动时的系统内存量计算的。
tcp_app_win : 整数
默认值为31
保留最多(window/2^tcp_app_win, mss) 个窗口用于应用程序缓冲。 0 表示不需要缓冲。
tcp_adv_win_scale : 整数
默认值为2
将缓冲区开销计算为bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale 0)或bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale=0)。
tcp_rfc1337 : 布尔值
默认值为0
此开关可以修复RFC1337 中描述的“tcp 时间等待暗杀危机”问题。启用后,内核会丢弃发送到有时间限制的TCP 套接字的RST 数据包。
tcp_low_latency : 布尔值
默认值为0
使TCP/IP 堆栈能够适应高吞吐量、低延迟的情况。该选项通常被禁用。 (但是,在构建Beowulf 集群时打开它很有用。)
tcp_westwood :BOOLEAN
默认值为0
启用发送方拥塞控制算法。这可以维持吞吐量估计并尝试优化整体带宽使用。必须启用此选项才能进行WAN 通信。
tcp_bic : 布尔值
默认值为0
为高速长途网络启用二进制增量拥塞。这提高了以GB 速度运行的链接的利用率。必须为WAN 流量启用此选项。
Linux 内核参数详解-KERNEL
内核.wake_balance=1
计划运行的线程在可用的计划CPU 上被唤醒。相反,CPU 根据缓存跟踪进行优化。默认值为1
内核.suid_dumpable=0
内核.unknown_nmi_panic=0
该参数的值影响操作(不可屏蔽中断处理)。如果该值非零,则未知的NMI 将被阻止并发生紧急情况。此时控制台上会显示内核调试信息,可以减少程序挂在系统上的情况。
内核.ngroups_max=65536
本文档指出了可以作为成员的补充组用户的最大数量(内核NGROUPS_MAX)。默认值为65536,但此可调参数似乎不适用于现代内核
内核.printk_ratelimit_burst=10
一段时间后,每隔printk_ratelimit 秒运行一条消息并允许脉冲消息通过。 Printk_ratelimit_burst指定消息的数量。在开始使用速率限制之前提交您的信息。
内核.printk_ratelimit=5
一些警告消息有速度限制。 Printk_ratelimit 指定这些消息之间的最短时间(以秒为单位)。默认情况下,允许的时间间隔为5 秒。值为0 将禁用速率限制。
内核.panic_on_oops=1
控制内核操作时发生错误。
0 尝试继续运行。
1 等待几秒钟(打印klogd 时间记录),然后发出警告。警告如果sysctl 也不为零,机器将重新启动。
内核.pid_max=32768
PID分配限制值。当内核的下一个PID值达到该值时,它恢复到最低的PID值。最大PID pid_max未分配,默认值为32768。
kernel.overflowgid=65534 和kernel.overflowuid=65534
这两个文件分别保存支持16 位用户ID 和组ID 的文件系统的用户ID (UID) 和组ID (GID)。更改这些值,但如果您确实需要更改它们,更改组和密码文件条目可能会更容易。
内核.pty.nr=1
该只读文件显示当前使用的UNIX 98 伪终端的数量。
内核.pty.max=4096
该文件指定unix 98伪终端的最大数量。
kernel.random.uuid=cbd55511-5292-4195-99f3-c
7e0b5b87624
这个只读文件包含随机字符串一样。一次是在系统启动后产生。另见:与/proc/sys/kernel/random/uuid.
kernel.random.boot_id = 538713fc-3f16-4d9f-9c75-7e5e61c10ee9
这个只读文件包含随机字符串一样。每次都会重新读。请参阅:/proc/sys/kernel/random/boot_id。
kernel.random.write_wakeup_threshold = 128
此文件包含二进制位数以下唤醒进程,做选择()或查询()的写权限的/dev/rrandom。
kernel.random.read_wakeup_threshold = 64
这个文件包含了很多信息片,他们有关于激活很多因等待查询/dev/random信息而休眠的进程。默认值为64。
kernel.random.entropy_avail = 3456
这个只读文件给出可用的平均信息量,通常,这个字为4096(bits)。一个全部的信息平均量的统筹。
kernel.random.poolsize = 512
这个文件提供平均信息数量池的大小。通常,这将是4096bits(512btyes).它可以将其更改为任何值的一种算法用。目前的选择是:32,64,128,256,512,1024,2048。
kernel.threads-max = 139264
该文件指定内核所能使用的线程的最大数目。
kernel.cad_pid = 1
按 ctrl-alt-del这个顺序 按下这些键 可以查到进程的id,init默认的id 是1
kernel.sysrq = 0
如果该文件指定的值为非0,则激活sysctem request key。默认值:0。
kernel.sem = 250 32000 32 128
该参数表示设置的信号量。
kernel.msgmnb = 16384
该文件指定在一个消息队列中最大的字节数 缺省设置:16384。
kernel.msgmni = 16
该文件指定消息队列标识的最大数目。缺省设置:16。
kernel.msgmax = 8192
该文件指定了从一个进程发送到另一个进程的消息最大长度。进程间的消息传递是在内核的内存中进行的。不会交换到硬盘上。所以如果增加该值,则将增加操作系统所使用的内存数量。
kernel.shmmni = 4096
该参数用于设置系统范围内共享内存段的最大数量,默认值为4096,通常不需要修改。
kernel.shmall = 2097152
该参数表示统一一次可以使用的共享内存总量(以页为单位)。默认是2097152,通常不需要修改。
kernel.shmmax = 33554432
该参数定义了共享内存段的最大尺寸(以字节为单位)。默认是32M。
kernel.acct = 2 4 30
该文件有三个配置值,根据包含日志的文件系统上可用空间的数量(以百分比表示),这些值控制何时开始进行进程记账,如果可用空间低于这个百分比值,则停止进程记账,如果可用共建高于这个百分比值,则开始进程记账。检查上面两个值得频率(以秒为单位)要更改这个文件的某个值,应该回送用空格分隔开的一串数字。默认值:2 4 30 如果包含日志的文件系统上只有少于2%的可用空间,则这些值会使记账停止,如果有4%或者更多的空间,则再次启动记账,每30秒做一次检查。
kernel.hotplug = /sbin/hotplug
hotplug的策略代理的位置,默认值是“/sbin/hotplug”
kernel.modprobe = /sbin/modprobe
这里是modprobe所存放的位置,使用这个程序按照要求装载模块。缺省值:”/sbin/modprobe”.
kernel.printk = 6 4 1 7
该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处,关于不同日志级别的更多信息,请阅读syslog。该文件4个值为:
控制台日志级别,优先级高于该值的消息将打印值控制台。
缺省消息日志级别:将用该优先级来打印没有优先级的消息。
最低的控制台日志级别:控制台日志级别可被设置最小值(最高优先级)
缺省的控制台日志级别:控制台日志级别的缺省值、
缺省设置:6 4 1 7。
kernel.ctrl-alt-del = 0
该文件有一个二进制值,该值控制系统在接收到ctrl+alt+delete按键组合时如何反应,这两个关键值为0值表示捕获ctrl+alt+delete。并将其送至init程序。这将允许系统可以完美地关闭和重启,就好象你输入shutdown命令一样。1值表示不捕获ctrl+alt+delete,将执行非干净的关闭,就好象直接关闭电源一样。默认值为0。
kernel.real-root-dev = 0
如果你已经支持编译initrd内核这个是可以编译的。在这种情况下,如果“真”根设备可以从linux内部文件系统改变新的文件设备号
kernel.cap-bound = -257
这个参数所谓“性能限制规定”的使用者空间:列表功能,可以将
kernel.tainted = 0
如果内核已经被非零改变。数值可ORed在一起:
1 一个模块与非GPL许可已被载入,这包括模块没有授权。(把modutils和module-init-tools在一起。)
2 这个模块被insmod强制装入。(把modutils和module-init-tools)。
4 不安全的SMP处理器:CPU的SMP与SMP不适合。
8 一个模块被rommod强制卸载(把modutils和module-init-tools)
16 自动校验发生异常。
32 系统已达到bad_page
kernel.core_pattern = core
是用来指定一个核心DumpFlie可格局名称:最大长度是64个字符。默认值为:“core”。Core_pattern被用作一种模式模板的输出文件名。某些字符串的模式(从“%”)是取代其实际值。反向兼容core_uses_pid:如果core_pattern不包括“%,p值”(默认是不)和core_uses_pid设置,然后
kernel.core_uses_pid = 1
默认coredump filename是“核心”。通过设置core_uses_pid为1(默认值为0),文件名的coredump成为核心PID。如果core_pattern不包括“%p”(默认是不)和core_uses_pid设置。那时pid将附加到文件名上。
kernel.print-fatal-signals = 0
这能够打印出一些关于用户在内核控制台出错的一些信息。它能记录早先的用户在那里出现了错误。默认是 off
kernel.exec-shield-randomize = 1
文件控制exec-shield是否要随机化VM映射。
0- 禁用随机化VM映射。
1- 启用随机化VM映射。
此选项默认值为1
kernel.exec-shield = 1
文件控制总体Exec-shield功能。这里他值有以下几个
0-(包括随机化的VM映射)在所有的二进制程序中被禁用,不管它是否已被标记。
1-在所有标记的二进制程序中被启用。
2-在所有二进制程序中被启用,不管它是否被标记)(仅用于测试目的)
此选项默认值为1.
kernel.panic = 0
该文件表示如果发生“内核严重错误(kernel panic)”,则内核在重新引导之前等待的时间(以秒为单位)。0秒设置在内发生内核严重错误时将禁止重新引导。缺省值:0
kernel.domainname = (none)
该文件允许配置网络域名。它没有缺省值,也许已经设置了域名。也许没有设置。
kernel.hostname = localhost.localdomain
该文件允许你配置网络主机名。
kernel.version = #1 SMP Fri Apr 20 16:36:54 EDT 2007
内核版本
kernel.osrelease = 2.6.9-55.ELsmp
内核OS 发布号
kernel.ostype = Linux
内核OS类型。
———————————–
linux内核常用调优参数
1. vm.swappiness:该参数控制系统在内存不足时,内核将页面交换到磁盘的程度。默认值为60,建议值为10-30。
2. vm.overcommit_memory:该参数控制系统是否允许超额分配内存。默认值为0,建议值为1。
3. vm.dirty_ratio:该参数控制系统脏页占内存的比例。默认值为20,建议值为5-10。
4. vm.dirty_background_ratio:该参数控制系统后台写入脏页的比例。默认值为10,建议值为1-5。
5. vm.dirty_expire_centisecs:该参数控制系统脏页过期时间。默认值为3000,建议值为1000-2000。
6. vm.dirty_writeback_centisecs:该参数控制系统写回脏页的时间间隔。默认值为500,建议值为100-200。
7. vm.vfs_cache_pressure:该参数控制系统内核缓存的大小和清理频率。默认值为100,建议值为50-100。
8. vm.min_free_kbytes:该参数控制系统保留的最小空闲内存。默认值为4096,建议值为65536。
9. vm.max_map_count:该参数控制系统允许的最大内存映射数量。默认值为65530,建议值为262144。
10. net.core.somaxconn:该参数控制系统TCP连接的最大排队数量。默认值为128,建议值为1024。
11. net.core.netdev_max_backlog:该参数控制系统网络设备接收数据包的队列大小。默认值为1000,建议值为5000。
12. net.core.rmem_max:该参数控制系统TCP接收缓冲区的最大大小。默认值为212992,建议值为524288。
13. net.core.wmem_max:该参数控制系统TCP发送缓冲区的最大大小。默认值为212992,建议值为524288。
14. net.ipv4.tcp_fin_timeout:该参数控制系统TCP连接关闭的超时时间。默认值为60,建议值为10-20。
15. net.ipv4.tcp_tw_reuse:该参数控制系统是否允许重用TIME_WAIT状态的TCP连接。默认值为0,建议值为1。
16. net.ipv4.tcp_tw_recycle:该参数控制系统是否启用TCP连接回收机制。默认值为0,建议值为1。
17. net.ipv4.tcp_max_syn_backlog:该参数控制系统TCP连接请求队列的大小。默认值为128,建议值为1024。
18. net.ipv4.tcp_keepalive_time:该参数控制系统TCP连接的保持时间。默认值为7200秒,建议值为600-1200。
19. net.ipv4.tcp_max_tw_buckets:该参数控制系统可以处理的TIME_WAIT状态的TCP连接的最大数量。默认值为180000,建议值为262144。
20. net.ipv4.ip_local_port_range:该参数控制系统可以使用的本地端口范围。默认值为32768-61000,建议值为1024-65535。
21. net.ipv4.tcp_slow_start_after_idle:该参数控制系统TCP连接空闲一段时间后是否重新进入慢启动状态。默认值为1,建议值为0。
22. net.ipv4.tcp_no_metrics_save:该参数控制系统是否保存TCP连接的性能指标。默认值为0,建议值为1。
23. net.ipv4.tcp_mtu_probing:该参数控制系统是否启用TCP MTU探测。默认值为0,建议值为1。
24. net.ipv4.tcp_congestion_control:该参数控制系统TCP拥塞控制算法。默认值为cubic,建议值为bbr。
25. fs.file-max:该参数控制系统可以打开的文件句柄数量。默认值为65536,建议值为1048576。
26. fs.nr_open:该参数控制系统可以打开的文件句柄数量。默认值为1048576,建议值为1048576。
27. fs.inotify.max_user_watches:该参数控制系统可以监视的文件数量。默认值为8192,建议值为524288。
28. kernel.sem:该参数控制系统信号量的数量。默认值为250,建议值为512-1024。
29. kernel.shmmax:该参数控制系统的共享内存大小。默认值为4294967295,建议值为536870912。
30. kernel.shmall:该参数控制系统的共享内存大小。默认值为2097152,建议值为134217728。
31. kernel.pid_max:该参数控制系统可以创建的最大进程数。默认值为32768,建议值为524288。
32. kernel.core_pattern:该参数控制系统在出现核心转储文件时的文件名格式。默认值为core,建议值为/corefiles/core-%e-%s-%u-%g-%p-%t。
33. kernel.msgmnb:该参数控制系统消息队列的最大大小。默认值为16384,建议值为65536。
34. kernel.msgmax:该参数控制系统消息队列的最大大小。默认值为8192,建议值为65536。
35. kernel.sysrq:该参数控制系统是否允许使用SysRq键。默认值为1,建议值为0。
36. kernel.printk:该参数控制系统内核日志的输出级别。默认值为4 4 1 7,建议值为3 3 3 3。
37. kernel.randomize_va_space:该参数控制系统是否启用地址空间随机化。默认值为2,建议值为2。
38. kernel.nmi_watchdog:该参数控制系统是否启用NMI watchdog。默认值为1,建议值为0。
39. kernel.softlockup_panic:该参数控制系统是否在软锁定时触发内核崩溃。默认值为0,建议值为1。
40. kernel.hung_task_panic:该参数控制系统是否在任务超时时触发内核崩溃。默认值为0,建议值为1。
41. kernel.panic:该参数控制系统在内核崩溃时的行为。默认值为0,建议值为10。
42. kernel.panic_on_oops:该参数控制系统在Oops发生时是否触发内核崩溃。默认值为0,建议值为1。
43. kernel.exec-shield:该参数控制系统是否启用执行保护。默认值为1,建议值为1。
44. kernel.dmesg_restrict:该参数控制系统是否限制非特权用户访问dmesg。默认值为1,建议值为1。
1 控制源路由验证
#Controls source route verification 控制源路由验证
net.ipv4.conf.default.rp_filter = 1
#这个参数设置的是反向路径过滤(Reverse Path Filtering,RPFilter)的策略。当rp_filter为1时,Linux内核会检查入站数据包的源IP地址是否与到达接口的路由表条目相匹配。如果源IP地址无法通过到达接口回溯到发送端,则数据包会被丢弃。启用此选项有助于防止IP地址欺骗攻击。
net.ipv4.ip_nonlocal_bind = 1
#这个参数允许或禁止非本地地址绑定到套接字。当ip_nonlocal_bind设置为1时,任何用户都可以将一个非本地IP地址(即不在本机接口上的IP地址)绑定到一个socket上。在某些场景下,例如负载均衡器或者需要绑定任意IP的代理服务器,可能需要开启这个选项。
net.ipv4.ip_forward = 1
#这个参数控制系统的IP转发功能。当ip_forward设置为1时,Linux内核将允许数据包在网络接口之间进行转发,这使得该主机可以作为路由器使用,允许其他设备通过它来传输数据包。这对于构建NAT环境、路由器和代理服务器等应用场景是必要的。关闭此选项则意味着主机仅处理发送给自身的数据包,不允许其成为网络中其他设备之间的通信桥梁。
#Do not accept source routing 不接受源路由
net.ipv4.conf.default.accept_source_route = 0
#这个设置禁止了IPv4协议栈接受源路由数据包。源路由允许数据包指定其在网络中传输的具体路径。由于这可能导致安全风险(如中间人攻击),因此默认禁用此功能以增强安全性。
2 控制内核的系统请求调试功能
#Controls the System Request debugging functionality of the kernel 控制内核的系统请求调试功能
kernel.sysrq = 0
#控制内核System Request (SysRq) 功能,也称为Magic SysRq Key。当值为0时,表示大部分SysRq组合键被禁用,只有少数用于紧急情况下的故障恢复操作可能仍然可用。这个设置可以防止未经授权的用户利用SysRq键进行潜在的恶意操作。
3 控制核心转储是否将PID附加到核心文件名
#Controls whether core dumps will append the PID to the core filename. 控制核心转储是否将PID附加到核心文件名
#Useful for debugging multi-threaded applications. 用于调试多线程应用程序
kernel.core_uses_pid = 1
#当该参数设为1时,系统在产生核心转储文件(core dump)时,会在核心文件名后附加进程ID(PID)。这对于调试多线程应用非常有用,因为它能确保来自不同进程的核心转储不会覆盖彼此,并且可以根据PID轻松区分各个转储文件
4 控制TCP同步cookie的使用
#Controls the use of TCP syncookies 控制TCP同步cookie的使用
net.ipv4.tcp_syncookies = 1
#这个设置启用TCP SYN Cookies功能。
在受到SYN Flood攻击(一种常见的DDoS攻击形式)时,
系统可能会耗尽可用的半连接队列资源。当tcp_syncookies被启用后,
在半连接队列满的情况下,系统会生成一个加密的SYN cookie来响应新的SYN请求,
以此避免拒绝合法的连接请求,并对部分攻击起到一定的防御作用
5 在网桥上禁用netfilter
#Disable netfilter on bridges. 在网桥上禁用netfilter
net.bridge.bridge-nf-call-ip6tables = 0
#这个设置禁止在网桥设备上应用ip6tables规则。这意味着任何通过该网桥的数据包将不会被IPv6防火墙规则处理。
net.bridge.bridge-nf-call-iptables = 0
#同样地,这个设置禁止在网桥设备上应用iptables规则。即,所有通过此网桥传输的IPv4数据包将不经过iptables防火墙过滤器。
net.bridge.bridge-nf-call-arptables = 0
#此设置禁用了在网桥设备上对ARP表项进行arptables规则检查。因此,所有通过该网桥的ARP流量都不会被ARP防火墙规则所影响。
6 控制消息队列的默认最大大小
#Controls the default maxmimum size of a mesage queue 控制消息队列的默认最大大小
kernel.msgmnb = 65536
#这个参数设置的是消息队列的最大字节数,默认的消息队列中单个消息的最大长度。在System V IPC机制中,消息队列允许进程间传递结构化数据,这里设定了单个消息的最大大小为64KB。
#Controls the maximum size of a message, in bytes 控制消息的最大大小(以字节为单位)
kernel.msgmax = 65536
#同样与消息队列有关,这个参数也是设置单个消息的最大尺寸,单位同样是字节。当两者同时设定时,msgmax必须大于等于msgmnb,并且这里的值同样为64KB。
#Controls the maximum shared segment size, in bytes 控制最大共享段大小(以字节为单位)
kernel.shmmax = 68719476736
#这个参数定义了系统范围内共享内存段的最大大小,以字节为单位。这里设定的最大共享内存段大小为64GB,这意味着Linux系统支持的最大单一共享内存区域不能超过这个值。
#Controls the maximum number of shared memory segments, in pages 控制共享内存段的最大数目,以页为单位
kernel.shmall = 4294967296
#此参数表示系统范围内共享内存总页数的最大值(以页为单位)。由于Linux系统通常使用4KB一页(具体取决于系统配置),所以这里的4294967296页相当于16TB(4096 * 4294967296)。这个数值影响系统可以分配的共享内存总量,不过实际能使用的共享内存量还要受shmmax的限制。
7 调试TCP内核参数
#TCP kernel paramater TCP内核参数
net.ipv4.tcp_mem = 786432 1048576 1572864
#这组参数定义了TCP内存使用的三个阈值(单位通常是页面数),分别为最小值、默认值和最大值。当TCP堆栈需要分配更多的内存来存储数据包时,它会根据当前的TCP内存使用量动态调整到这三个阈值之间。这有助于防止在高负载或攻击情况下耗尽系统内存。
net.ipv4.tcp_rmem = 4096 87380 4194304
#这个设置定义了接收缓冲区大小的范围。分别对应的是最小接收缓冲区大小、默认接收缓冲区大小以及最大接收缓冲区大小(单位都是字节)。较大的接收窗口可以提高网络吞吐量,但过度增加可能会导致延迟增大或者带宽浪费。
net.ipv4.tcp_wmem = 4096 16384 4194304
#类似地,这个设置定义了发送缓冲区大小的范围。最小发送缓冲区大小、默认发送缓冲区大小以及最大发送缓冲区大小(同样以字节为单位)。适当地调整发送缓冲区大小有助于平衡网络带宽利用和响应时间
net.ipv4.tcp_window_scaling = 1
#当此参数设置为1时,启用TCP窗口缩放选项。窗口缩放允许TCP连接使用超过旧版TCP规范中定义的64KB窗口限制,从而支持更大的带宽和更高的吞吐量。
net.ipv4.tcp_sack = 1
#启用选择确认(SACK)选项,SACK允许TCP发送方和接收方更精确地了解哪些数据已经正确收到,哪些数据需要重新传输。启用SACK可以改善丢包恢复效率,并在一定程度上提升带宽利用率和网络性能。
8 调试套接字缓冲区
#socket buffer 套接字缓冲区
net.core.wmem_default = 8388608
#这个设置定义了每个TCP套接字默认的发送缓冲区大小(单位是字节)。较大的发送缓冲区可以容纳更多的待发送数据,有助于提高带宽利用率,但也可能导致延迟增大。
net.core.rmem_default = 8388608
#这个设置设定了每个TCP套接字默认的接收缓冲区大小。更大的接收缓冲区能容纳更多等待处理的数据包,对高带宽环境下的性能优化有益。
net.core.rmem_max = 16777216
#这个值是TCP套接字接收缓冲区的最大允许大小,任何尝试设置超过这个值的操作都将被限制在此范围内。
net.core.wmem_max = 16777216
#类似地,此参数设置了TCP套接字发送缓冲区的最大可配置大小。
net.core.netdev_max_backlog = 262144
#这个参数控制了网络设备在队列满时还能临时缓存多少未处理的数据包。较高的数值意味着网络接口在处理中断和数据包转发之间可以承受更高的负载,但过高的数值可能会导致延迟增加。
net.core.somaxconn = 20480
#这个参数决定了监听套接字(如服务器端)所能接受的并发连接请求的最大数量。增加这个值可以提高服务端同时处理新连接请求的能力,但在某些情况下也可能造成资源浪费。
net.core.optmem_max = 81920
#这个设置指定了单个套接字上选项内存区域的最大大小,用于存储TCP、UDP等协议选项相关的数据结构。
9 调试与TCP连接管理相关
#TCP conn TCP连接管理相关
net.ipv4.tcp_max_syn_backlog = 262144
#这个参数设置SYN队列的大小,即半开连接队列的最大长度。当服务器收到一个SYN(同步)请求时,在收到客户端确认之前,这个连接处于半开状态并存放在SYN队列中。增大此值可以应对更大的并发SYN攻击或高负载情况下的连接建立需求,但过高可能会消耗过多内存。
net.ipv4.tcp_syn_retries = 3
#这个参数指定了在TCP三次握手过程中,服务器发送SYN-ACK后重试的次数。如果在指定次数内没有收到客户端的ACK响应,则服务器将放弃连接尝试。默认值为3次,通常不需要频繁调整。
net.ipv4.tcp_retries1 = 3
#定义了数据包在正常传输阶段(非初始连接建立阶段)丢失后的重试次数。在此阶段,如果发送的数据包未得到确认,内核会进行一定次数的重传尝试。同样,默认值通常足够使用,但在网络环境较差的情况下可能需要适当增加以提高数据传输可靠性。
net.ipv4.tcp_retries2 = 15
#类似于tcp_retries1,但这是在慢启动阶段或者拥塞避免算法触发重传时的重试次数。在网络状况不佳或存在严重丢包问题时,可能需要增大该值以保持连接稳定。
10 TCP连接重用
#tcp conn reuse TCP连接重用
net.ipv4.tcp_tw_reuse = 1
#当设置为1时,允许在TIME_WAIT状态的socket被重用来建立新的连接。这对于服务器端处理大量短连接的情况很有帮助,可以更高效地利用系统资源,减少新连接建立的时间开销。但需要注意的是,在某些NAT网络环境中启用此选项可能会导致连接混淆问题。
net.ipv4.tcp_tw_recycle = 1
#启用该选项后,Linux内核会尝试快速回收处于TIME_WAIT状态的套接字以节省资源。这同样有助于提高高并发短连接场景下的性能。然而,由于它依赖于精确的往返时间计算(RFC 1323 timestamps),在存在NAT或防火墙设备的情况下可能导致连接不稳定。因此,现代Linux内核通常不推荐使用此选项
net.ipv4.tcp_fin_timeout = 1
#启用该选项后,Linux内核会尝试快速回收处于TIME_WAIT状态的套接字以节省资源。这同样有助于提高高并发短连接场景下的性能。然而,由于它依赖于精确的往返时间计算(RFC 1323 timestamps),在存在NAT或防火墙设备的情况下可能导致连接不稳定。因此,现代Linux内核通常不推荐使用此选项
net.ipv4.tcp_max_tw_buckets = 20000
#这个参数设置系统可以同时保持的TIME_WAIT状态套接字的最大数量。当超过这个值时,旧的TIME_WAIT套接字将被强制关闭以释放资源。在高并发短连接场景下,可能需要增大此值以支持更多的并发连接。
net.ipv4.tcp_max_orphans = 3276800
#指定了系统能够接受并维护的无父进程的(即孤儿)TCP套接字的最大数量。当一个进程结束但其创建的TCP连接尚未完全关闭时,这些连接会成为孤儿套接字,由内核进行清理。如果短时间内产生大量孤儿套接字可能会耗尽资源,因此可以通过调整该参数来控制。
net.ipv4.tcp_timestamps = 1 #?
#当设置为1时,启用TCP时间戳选项(RFC 1323)。时间戳有助于更精确地计算往返时间(RTT),从而改善TCP拥塞控制和重新排序算法的表现。大多数现代网络环境都建议开启此选项。
net.ipv4.tcp_synack_retries = 1
#设置服务器在收到客户端的SYN请求后发送SYN+ACK包后的重试次数。默认情况下,服务器会尝试多次发送SYN+ACK直到收到客户端的确认。将此值设为1意味着只尝试一次,这可以减少潜在的SYN洪泛攻击的影响,但可能会降低正常连接建立的成功率。
net.ipv4.tcp_syncookies = 1
#启用TCP SYN Cookies功能,这是一种对抗SYN洪泛攻击的技术。在SYN队列满的情况下,系统将生成SYN cookie回复给客户端,避免了拒绝合法连接请求的问题。在面临大规模SYN洪泛攻击时,启用此选项非常有用。3.11 TCP连接保活(Keepalive)和本地端口范围
#keepalive conn TCP连接保活(Keepalive)和本地端口范围
net.ipv4.tcp_keepalive_time = 300
#这个参数设置TCP连接空闲多久后开始发送保活探测(Keepalive probes)。这里的值是300秒,意味着如果一个TCP连接在300秒内没有任何数据交换,系统将开始发送保活探测包以检查对端是否仍然在线。
net.ipv4.tcp_keepalive_intvl = 30
#定义了连续两个保活探测包之间的间隔时间。在这个例子中,每隔30秒发送一次保活探测包,直到收到对方响应或达到最大探测次数。
net.ipv4.tcp_keepalive_probes = 3
#指定在未收到任何响应时发送的最大保活探测包的数量。当系统发送3次保活探测包都没有得到回应后,会认为连接已经断开并关闭该连接。
net.ipv4.ip_local_port_range = 10001 65000
#这个参数定义了Linux系统分配给新的出站TCP/UDP连接的本地端口号范围。最小值为10001,最大值为65000,这意味着系统在这两个数值之间随机选择可用端口用于发起新的网络连接。
11 TCP连接保活(Keepalive)和本地端口范围
#keepalive conn TCP连接保活(Keepalive)和本地端口范围
net.ipv4.tcp_keepalive_time = 300
#这个参数设置TCP连接空闲多久后开始发送保活探测(Keepalive probes)。这里的值是300秒,意味着如果一个TCP连接在300秒内没有任何数据交换,系统将开始发送保活探测包以检查对端是否仍然在线。
net.ipv4.tcp_keepalive_intvl = 30
#定义了连续两个保活探测包之间的间隔时间。在这个例子中,每隔30秒发送一次保活探测包,直到收到对方响应或达到最大探测次数。
net.ipv4.tcp_keepalive_probes = 3
#指定在未收到任何响应时发送的最大保活探测包的数量。当系统发送3次保活探测包都没有得到回应后,会认为连接已经断开并关闭该连接。
net.ipv4.ip_local_port_range = 10001 65000
#这个参数定义了Linux系统分配给新的出站TCP/UDP连接的本地端口号范围。最小值为10001,最大值为65000,这意味着系统在这两个数值之间随机选择可用端口用于发起新的网络连接。
12 swap交换分区
#swap 分区
vm.overcommit_memory = 0
#这个参数控制了系统对内存分配请求的处理策略。设置为0意味着系统采用保守的过载提交策略(heuristic overcommit),仅允许在物理内存加上交换空间足以满足所有已分配内存的情况下进行新的内存分配。这种设置下,虽然可能会减少意外OOM(Out of Memory)错误的发生,但也可能限制了程序利用内存的能力。
vm.swappiness = 10
#这个参数定义了Linux内核将页面从物理内存交换到交换分区(swap space)的倾向性。取值范围是0到100,默认值通常在30至60之间。值越低,表示内核更不愿意将内存页换出到交换分区;值越高,则内核更倾向于使用交换分区。这里设置为10,意味着内核相对保守地使用交换空间,尽量保持应用程序在物理内存中运行以提高性能。但请注意,对于某些内存需求波动较大的应用或系统资源紧张时,较低的swappiness设置可能导致可用内存不足的问题。
net.ipv4.conf.eth1.rp_filter = 0
#这行配置表示在eth1这个网络接口上禁用反向路径过滤(Reverse Path Filtering,RP_filter)。RP_filter是一种安全机制,用于防止IP地址欺骗。当设置为0时,系统将不对数据包的源IP地址进行严格的反向路径检查,即允许来自任何接口的数据包经过eth1接口发送出去。在某些特定情况下(如负载均衡、NAT等),可能需要禁用此功能。
net.ipv4.conf.lo.arp_ignore = 1
#设置本地回环接口(lo)的ARP忽略级别为1。这意味着对lo接口而言,只有目的IP地址匹配本机任何一个接口IP地址的数据包才会响应ARP请求。这对于防止通过lo接口对外广播ARP请求或响应是有帮助的。
net.ipv4.conf.lo.arp_announce = 2
#设置本地回环接口的ARP通告级别为2。这意味着对于从lo接口发出的ARP请求或响应,系统会尽量使用最具体的IP地址来通告。在多播路由或者有多个IP地址的情况下,这有助于减少混淆并确保正确的IP映射关系。
net.ipv4.conf.all.arp_ignore = 1
#设置本地回环接口的ARP通告级别为2。这意味着对于从lo接口发出的ARP请求或响应,系统会尽量使用最具体的IP地址来通告。在多播路由或者有多个IP地址的情况下,这有助于减少混淆并确保正确的IP映射关系。
net.ipv4.conf.all.arp_announce = 2
#同样地,将所有网络接口的ARP通告级别设为2,表明系统在所有接口上都会尽量以最具体的IP地址发出ARP请求和响应。
13 Nginx服务器优化内核参数(nginx)
默认的Linux内核参数考虑的是最通用场景,不符合用于支持高并发访问的Web服务器的定义,根据业务特点来进行调整,当Nginx作为静态web内容服务器、反向代理或者提供压缩服务器的服务器时,内核参数的调整都是不同的,此处针对最通用的、使Nginx支持更多并发请求的TCP网络参数做简单的配置
[root@localhost ~]#vim /etc/sysctl.conf #修改配置文件
fs.file-max = 1000000
#表示单个进程较大可以打开的句柄数
net.ipv4.tcp_tw_reuse = 1
#参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,这对于服务器来说意义重大,因为总有大量TIME_WAIT状态的链接存在
net.ipv4.tcp_keepalive_time = 600
#当keepalive启动时,TCP发送keepalive消息的频度;默认是2小时,将其设置为10分钟,可更快的清理无效链接
net.ipv4.tcp_fin_timeout = 30
#当服务器主动关闭链接时,socket保持在FIN_WAIT_2状态的较大时间
net.ipv4.tcp_max_tw_buckets = 5000
#表示操作系统允许TIME_WAIT套接字数量的较大值,如超过此值,TIME_WAIT套接字将立刻被清除并打印警告信息,默认为8000,过多的TIME_WAIT套接字会使Web服务器变慢
net.ipv4.ip_local_port_range = 1024 65000
#定义UDP和TCP链接的本地端口的取值范围
net.ipv4.tcp_rmem = 10240 87380 12582912
#定义了TCP接受缓存的最小值、默认值、较大值
net.ipv4.tcp_wmem = 10240 87380 12582912
#定义TCP发送缓存的最小值、默认值、较大值
net.core.netdev_max_backlog = 8096
#当网卡接收数据包的速度大于内核处理速度时,会有一个列队保存这些数据包。这个参数表示该列队的较大值
net.core.rmem_default = 6291456
#表示内核套接字接受缓存区默认大小
net.core.wmem_default = 6291456
#表示内核套接字发送缓存区默认大小
net.core.rmem_max = 12582912
#表示内核套接字接受缓存区较大大小
net.core.wmem_max = 12582912
#表示内核套接字发送缓存区较大大小
注意:以上的四个参数,需要根据业务逻辑和实际的硬件成本来综合考虑
net.ipv4.tcp_syncookies = 1
#与性能无关。用于解决TCP的SYN攻击
net.ipv4.tcp_max_syn_backlog = 8192
#这个参数表示TCP三次握手建立阶段接受SYN请求列队的较大长度,默认1024,将其设置的大一些可使出现Nginx繁忙来不及accept新连接时,Linux不至于丢失客户端发起的链接请求
net.ipv4.tcp_tw_recycle = 1
#这个参数用于设置启用timewait快速回收
net.core.somaxconn=262114
#选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此需要结合高并发请求数来调节此值。
net.ipv4.tcp_max_orphans=262114
#选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立链接将立即被复位并输出警告信息。这个限制指示为了防止简单的DOS攻击,不用过分依靠这个限制甚至认为的减小这个值,更多的情况是增加这个值
14 TCP网络内核参数优化
#本地端口使用范围
net.ipv4.ip_local_port_range = 1024 65535
#内核网络接收缓存大小
net.core.rmem_max=16777216
#内核网络发送缓存大小
net.core.wmem_max=16777216
#TCP接收缓存,最小值,默认值,最大值
net.ipv4.tcp_rmem=4096 87380 16777216
#TCP发送缓存,最小值,默认值,最大值
net.ipv4.tcp_wmem=4096 65536 16777216
#对于本端断开的socket连接,TCP保持在FINWAIT2状态的时间(秒)。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。
net.ipv4.tcp_fin_timeout = 10
#能够更快地回收TIMEWAIT套接字。
net.ipv4.tcp_tw_recycle = 1
#TCP时间戳(会在TCP包头增加12个字节),以一种比重发超时更精确的方法(参考RFC 1323)来启用对RTT 的计算,为实现更好的性能应该启用这个选项。
net.ipv4.tcp_timestamps = 0
#启用RFC 1323定义的window scaling,要支持超过64KB的TCP窗口,必须启用该值(1表示启用),TCP窗口最大至1GB,TCP连接双方都启用时才生效。
net.ipv4.tcp_window_scaling = 0
#启用有选择的应答(1表示启用),通过有选择地应答乱序接收到的报文来提高性能,让发送者只发送丢失的报文段,(对于广域网通信来说)这个选项应该启用,但是会增加对CPU的占用。
net.ipv4.tcp_sack = 0
#在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
#定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。
net.core.somaxconn = 262144
#表示是否打开TCP同步标签(syncookie),内核必须打开了CONFIG_SYN_COOKIES项进行编译,同步标签可以防止一个套接字在有过多试图连接到达时引起过载。
net.ipv4.tcp_syncookies = 0
#系统所能处理不属于任何进程的 socket数量
net.ipv4.tcp_max_orphans = 262144
#对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器经常出现过载,可以尝试增加这个数字。
net.ipv4.tcp_max_syn_backlog = 262144
#SNY/ACK重试次数
net.ipv4.tcp_synack_retries = 2
#SYN重试次数
net.ipv4.tcp_syn_retries = 2
#以上关于科普文:linux服务器性能调优之内核参数的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92948.html