科普文:linux服务器性能调优之内核参数
https://zhouxx.blog.csdn.net/article/details/140168148
在写上面这篇“科普文:Linux服务器性能调优概叙”文章时,由于篇幅原因,将部分内核参数独立出来。
内核参数文件位置:/etc/sysctrl.conf
内核修改和生效命令:sysctl
sysctl -a #列出所有的内核参数及其当前值
sysctl kernel.parameter_name #查看特定参数的值
sysctl -w parameter_name=new_value #临时修改参数的值,但重启后会恢复为默认值
通过修改/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
该文件表示是否使用最新的32位共享内存mmap()系统调用,linux支持的共享内存分配方式包括mmap(),posix,system VIPC。
0,使用最新32为mmap()系统调用。
1,使用2.4内核提供的系统调用。
默认值:0
vm.vfs_cache_pressure = 100
该文件表示内核回收用于directory和inode cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode cache;增加该值超过100,将导致内核倾向于回收directory和inode cache。缺省值:100
vm.block_dump = 0
该文件表示是否打开block Debug模式,用于记录所有的读写及Dirty Block写回动作。缺省值:0 禁用Block Bebug模式。
vm.laptop_mode = 0
如果返回值为0的话。表示系统还未进行Laptop Mode。如果返回其他正数值表示系统成功进入Laptop Mode。
vm.max_map_count = 65536
该文件允许max_map_count限制虚拟内存的数量。
vm.min_free_kbytes = 102400
该文件表示强制linux vm最低保留多少空闲内存(Kbytes)。
vm.lower_zone_protection = 0
vm.hugetlb_shm_group = 0
该文件表示允许使用hugetlb页创建system VIPC共享内存段的系统组ID。
vm.nr_hugepages = 0
该文件表示系统保留的hugetlb页数。
vm.swappiness = 60
减少系统对于swap频繁的写入,将加快应用程序之间的切换,有助于提升系统性能。默认值为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
该文件表示在写一次到swap区的时候写入的页面数量,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 :INTEGER
默认值是5
对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1 决定的)
tcp_synack_retries :INTEGER
默认值是5
对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。(可以根据上面的tcp_syn_retries来决定这个值)
tcp_keepalive_time :INTEGER
默认值是7200(2小时)
当keepalive打开的情况下,TCP发送keepalive消息的频率。(由于目前网络攻击等因素,造成了利用这个进行的攻击很频繁,曾经也有cu的朋友提到过,说如果2边建立了连接,然后不发送任何数据或者rst/fin消息,那么持续的时间是不是就是2小时,空连接攻击?tcp_keepalive_time就是预防此情形的.我个人在做nat服务的时候的修改值为1800秒)
tcp_keepalive_probes:INTEGER
默认值是9
TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适)
tcp_keepalive_intvl:INTEGER
默认值为75
探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。(对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)
tcp_retries1 :INTEGER
默认值是3
放弃回应一个TCP连接请求前﹐需要进行多少次重试。RFC 规定最低的数值是3﹐这也是默认值﹐根据RTO的值大约在3秒 - 8分钟之间。(注意:这个值同时还决定进入的syn连接)
tcp_retries2 :INTEGER
默认值为15
在丢弃激活(已建立通讯状况)的TCP连接之前﹐需要进行多少次重试。默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100秒).(这个值根据目前的网络设置,可以适当地改小,我的网络内修改为了5)
tcp_orphan_retries :INTEGER
默认值是7
在近端丢弃TCP连接之前﹐要进行多少次重试。默认值是7个﹐相当于 50秒 - 16分钟﹐视 RTO 而定。如果您的系统是负载很大的web服务器﹐那么也许需要降低该值﹐这类 sockets 可能会耗费大量的资源。另外参的考 tcp_max_orphans 。(事实上做NAT的时候,降低该值也是好处显著的,我本人的网络环境中降低该值为3)
tcp_fin_timeout :INTEGER
默认值是 60
对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在2.2版本的内核中是 180 秒。您可以设置该值﹐但需要注意﹐如果您的机器为负载很重的web服务器﹐您可能要冒内存被大量无效数据报填满的风险﹐FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1 ﹐因为它们最多只吃 1.5K 的内存﹐但是它们存在时间更长。另外参考 tcp_max_orphans。(事实上做NAT的时候,降低该值也是好处显著的,我本人的网络环境中降低该值为30)
tcp_max_tw_buckets :INTEGER
默认值是180000
系统在同时所处理的最大 timewait sockets 数目。如果超过此数的话﹐time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要人为的降低这个限制﹐不过﹐如果网络条件需要比默认值更多﹐则可以提高它(或许还要增加内存)。(事实上做NAT的时候最好可以适当地增加该值)
tcp_tw_recycle :BOOLEAN
默认值是0
打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求﹐请不要随意修改这个值。(做NAT的时候,建议打开它)
tcp_tw_reuse:BOOLEAN
默认值是0
该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接(这个对快速重启动某些服务,而启动后提示端口已经被使用的情形非常有帮助)
tcp_max_orphans :INTEGER
缺省值是8192
系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)
tcp_abort_on_overflow :BOOLEAN
缺省值是0
当守护进程太忙而不能接受新的连接,就象对方发送reset消息,默认值是false。这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。(对待已经满载的sendmail,apache这类服务的时候,这个可以很快让客户端终止连接,可以给予服务程序处理已有连接的缓冲机会,所以很多防火墙上推荐打开它)
tcp_syncookies :BOOLEAN
默认值是0
只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用。当出现syn等候队列出现溢出时象对方发送syncookies。目的是为了防止syn flood攻击。
注意:该选项千万不能用于那些没有收到攻击的高负载服务器,如果在日志中出现synflood消息,但是调查发现没有收到synflood攻击,而是合法用户的连接负载过高的原因,你应该调整其它参数来提高服务器性能。参考:
tcp_max_syn_backlogtcp_synack_retriestcp_abort_on_overflow
syncookie严重的违背TCP协议,不允许使用TCP扩展,可能对某些服务导致严重的性能影响(如SMTP转发)。(注意,该实现与BSD上面使用的tcp proxy一样,是违反了RFC中关于tcp连接的三次握手实现的,但是对于防御syn-flood的确很有用.)
tcp_stdurg :BOOLEAN
默认值为0
使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的 BSD解释,因此如果您在 Linux 打开它﹐或会导致不能和它们正确沟通。
tcp_max_syn_backlog :INTEGER
对于那些依然还未获得客户端确认的连接请求﹐需要保存在队列中最大数目。对于超过 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()和Accept() ),是用另一个队列单独存放半打开连接。这种双队列处理方式和其他一些系统内核措施(例如Syn-Cookies/Caches)联合应用时,能够比较有 效的缓解小规模的SYN Flood攻击(事实证明<1000p/s)加大SYN队列长度可以容纳更多等待连接的网络连接数,所以对Server来说可以考虑增大该值.)
tcp_window_scaling :INTEGER
缺省值为1
该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力(RFC 1323)。(对普通地百M网络而言,关闭会降低开销,所以如果不是高速网络,可以考虑设置为0)
tcp_timestamps :BOOLEAN
缺省值为1
Timestamps 用在其它一些东西中﹐可以防范那些伪造的 sequence 号码。一条1G的宽带线路或许会重遇到带 out-of-line数值的旧sequence 号码(假如它是由于上次产生的)。Timestamp 会让它知道这是个 ‘旧封包’。(该文件表示是否启用以一种比超时重发更精确的方法(RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。)
tcp_sack :BOOLEAN
缺省值为1
使用 Selective ACK﹐它可以用来查找特定的遗失的数据报— 因此有助于快速恢复状态。该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段)。(对于广域网通信来说这个选项应该启用,但是这会增加对 CPU 的占用。)
tcp_fack :BOOLEAN
缺省值为1
打开FACK拥塞避免和快速重传功能。(注意,当tcp_sack设置为0的时候,这个值即使设置为1也无效)
tcp_dsack :BOOLEAN
缺省值为1
允许TCP发送”两个完全相同”的SACK。
tcp_ecn :BOOLEAN
缺省值为0
打开TCP的直接拥塞通告功能。
tcp_reordering :INTEGER
默认值是3
TCP流中重排序的数据报最大数量 。 (一般有看到推荐把这个数值略微调整大一些,比如5)
tcp_retrans_collapse :BOOLEAN
缺省值为1
对于某些有bug的打印机提供针对其bug的兼容性。(一般不需要这个支持,可以关闭它)
tcp_wmem(3个INTEGER变量): min, default, max
min:为TCP socket预留用于发送缓冲的内存最小值。每个tcp socket都可以在建议以后都可以使用它。默认值为4096(4K)。
default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem_default 值,一般要低于net.core.wmem_default的值。默认值为16384(16K)。
max: 用于TCP socket发送缓冲的内存最大值。该值不会影响net.core.wmem_max,”静态”选择参数SO_SNDBUF则不受该值影响。默认值为131072(128K)。(对于服务器而言,增加这个参数的值对于发送数据很有帮助,在我的网络环境中,修改为了51200 131072 204800)
tcp_rmem (3个INTEGER变量): min, default, max
min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下tcp socket都至少会有这么多数量的内存用于接收缓冲,默认值为8K。
default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem_default 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win=0默认值情况下,TCP窗口大小为65535。默认值为87380
max:用于TCP socket接收缓冲的内存最大值。该值不会影响 net.core.wmem_max,”静态”选择参数 SO_SNDBUF则不受该值影响。默认值为 128K。默认值为87380*2 bytes。(可以看出,.max的设置最好是default的两倍,对于NAT来说主要该增加它,我的网络里为 51200 131072 204800)
tcp_mem(3个INTEGER变量):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)
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
tcp_app_win : INTEGER
默认值是31
保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。
tcp_adv_win_scale : INTEGER
默认值为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 :BOOLEAN
缺省值为0
这个开关可以启动对于在RFC1337中描述的”tcp 的time-wait暗杀危机”问题的修复。启用后,内核将丢弃那些发往time-wait状态TCP套接字的RST 包.
tcp_low_latency : BOOLEAN
缺省值为0
允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况;这个选项一般情形是的禁用。(但在构建Beowulf 集群的时候,打开它很有帮助)
tcp_westwood :BOOLEAN
缺省值为0
启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽的整体利用情况进行优化;对于 WAN 通信来说应该启用这个选项。
tcp_bic :BOOLEAN
缺省值为0
为快速长距离网络启用 Binary Increase Congestion;这样可以更好地利用以 GB 速度进行操作的链接;对于 WAN 通信应该启用这个选项。
Linux 内核参数详解-KERNEL
kernel.wake_balance = 1
导致调度运行线程被唤醒的任何avaialble调度的CPU。而不是它的CPU的优化的基础上缓存痕迹。默认为1
kernel.suid_dumpable = 0
kernel.unknown_nmi_panic = 0
该参数的值影响的行为(非屏蔽中断处理)。当这个值为非0,未知的NMI受阻,PANIC出现。这时,内核调试信息显示控制台,则可以减轻系统中的程序挂起。
kernel.ngroups_max = 65536
该文件显示了最大数量的补充群体用户可以是一个成员(内核的NGROUPS_MAX)的使用者。缺省值是65536,这可调似乎没有在任何地方使用最新的内核
kernel.printk_ratelimit_burst = 10
一段时间后,我们执行一个信息由printk_ratelimit秒钟,我们允许脉冲信息通过。Printk_ratelimit_burst指定信息数量。在ratelimiting开始起用前,我们提交出信息。
kernel.printk_ratelimit = 5
一些警告信息速度有限。Printk_ratelimit指定的最小长度的时间间隔这些信息(秒)。默认情况下,我们允许美5秒间隔。值为0时将禁用速率限制。
kernel.panic_on_oops = 1
控制内核的行为时遇到错误。
0 尝试继续运行。
1 延迟几秒钟(输出klogd时间记录),然后警告,如果警告sysctl也是非0后机器将重新启动。
kernel.pid_max = 32768
PID分配限制值。当内核下一个PID值到达这个值,它会回到最低的PID值。PID的最大的pid_max未分配,默认值为32768
kernel.overflowgid = 65534和kernel.overflowuid = 65534
这两个文件分别保存那些支持16位用户标识和组标识的任何文件系统的用户标识(UID)和组标识(GID)。可是更改这些值,但如果您确实觉得需要这样做,那么可能会发现更改组和密码文件项更容易些。
kernel.pty.nr = 1
这个只读文件表明多少unix的98假终端目前正在使用
kernel.pty.max = 4096
此文件规定的最大数量的unix 98 假终端。
kernel.random.uuid = cbd55511-5292-4195-99f3-c7e0b5b87624
这个只读文件包含随机字符串一样。一次是在系统启动后产生。另见:与/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
原文地址:https://blog.csdn.net/Rookie_CEO/article/details/140168658
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!