Linux系统的几个重要内核参数
以下是在/etc/sysctl.conf文件中配置的几个重要内核参数,这几个参数的设置关系到系统性能:
net.ipv4.tcp_syncookies
#此参数应该设置为1,防止SYN Flood。
处在SYN_RECV的TCP连接称为半连接,存储在SYN队列。大量SYN_RECV会导致队列溢出,后续请求将被内核直接丢弃,也就是SYN Flood攻击。开启syncookies后,当SYN队列满了后,TCP会通过原地址端口,目的地址端口和时间戳打造一个特别的Sequence Number(又叫cookie发回去,如果是攻击者则不会有响应,如果是正常连接则把这个SYNCookie发回来,然后服务器端可以通过cookie建立连接(即使不在SYN队列)。
net.ipv4.tcp_fin_timeout
#此参数默认值60,TCP保持在FIN_WAIT2状态的时间,超时后直接处于CLOSED,所以降低tcp_fin_timeout有助于减少TIME_WAIT数量。注意:虽然shutdown(SHUD_WR)也会处于FIN_WAIT2状态,但超时并不起作用。
net.ipv4.tcp_tw_recycle
#此参数默认值0,打开快速TIME_WAIT socket回收。
如果tcp_timestamps开启的话,会缓存每个连接的最新时间戳,如果后续请求时间戳小于缓存的时间戳,即视为无效,相应的包被丢弃。所以如果是在NAT(Network Address Translation)网络下,就可能出现数据包丢弃的现象,会导致大量的TCP连接建立错误。
net.ipv4.tcp_tw_resue
#此参数默认值0,是否重用TIME_WAIT状态的socket用于新的连接。
这个选项要比net.ipv4.tcp_tw_recycle安全,从协议的角度看,复用是安全的。复用条件:
1)net.ipv4.tcp_timestamps选项必须打开(客户端也必须打开) ;
2) 重用TIME_WAIT的条件是收到最后一个包后超过1秒;
net.ipv4.tcp_keepalive_time = 1200
#此参数表示TCP发送keepalive探测消息的间隔时间(秒), 用于确认TCP连接是否有效。当keepalive起用时,TCP发送keepalive消息的频度。缺省是2小时,可改为20分钟。
################################################################
###### Linux服务器产生大量CLOSE-WAIT的原因和处理方法 #####
################################################################
close_wait状态出现的原因是被动关闭方未关闭socket造成
当客户端因为某种原因先于服务端发出了FIN信号,就会导致服务端被动关闭,若服务端不主动关闭socket发FIN给Client,此时服务端Socket会处于CLOSE_WAIT状态(而不是LAST_ACK状态)。通常来说,一个CLOSE_WAIT会维持至少2个小时的时间(系统默认超时时间的是7200秒,也就是2小时)。如果服务端程序因某个原因导致系统造成一堆CLOSE_WAIT消耗资源,那么通常是等不到释放那一刻,系统就已崩溃。
这里需要首先了解下tcp keepalive的三个参数:
默认tcp_keepalive_time 的值为7200 ,超时时间(开启keepalive的闲置时长);
默认tcp_keepalive_intvl 的值为75 ,tcp检查间隔时间(keepalive探测包的发送间隔);
默认tcp_keepalive_probes 的值为9 ,tcp检查次数(如果对方不予应答,探测包的发送次数);
要根据自身的业务来调整这三个参数,有下面三种方式:
第一种方式: # vim /etc/sysctl.conf net.ipv4.tcp_keepalive_time = 1800 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_intvl = 15 # sysctl -p 第二种方式: # echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time # echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl # echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes 第三种方式: # sysctl -w net.ipv4.tcp_keepalive_time=600 # sysctl -w net.ipv4.tcp_keepalive_probes=2 # sysctl -w net.ipv4.tcp_keepalive_intvl=2
相关文章
- Linux curl
- Linux 下修改Tomcat使用的JVM内存大小
- 【ARM-Linux开发】内核3.x版本之后设备树机制
- 【VS开发】【Linux开发】【DSP开发】如何截获以太网帧并解析
- Linux系统编程:系统调用【是一个内核与用户空间程序交互的接口(桥梁)】【操作系统提供给用户程序调用的一组“特殊”接口】【可以通过这组“特殊”接口来获得操作系统内核提供的服务】
- 极客日报第122期:95后大学生利用漏洞免费吃肯德基获刑;Linux内核初步支持苹果M1;Android Studio 4.2 发布
- 谈谈为 Linux 内核写驱动的编码规范
- Nginx之旅系列 - Nginx日志功能 PK Linux内核printk
- ***在Linux环境下mysql的root密码忘记解决方法(三种)-推荐第三种
- Linux之增加系统调用[内核编译]
- CentOS 7.4升级Linux内核
- NSA在Github上建立主页 开放了32个项目 selinux项目多年前就是Linux内核的一部分
- [linux][c/c++]代码片段02
- Linux内核-系统调用
- Linux 内核优化
- 五年26个版本:Linux系统内核全程回顾
- 《linux 内核全然剖析》sched.c sched.h 代码分析笔记
- 模仿linux内核定时器代码,用python语言实现定时器
- 虚拟化–操作系统级 LXC Linux Containers内核轻量级虚拟化技术
- Linux权限提升—内核、SUID、脏牛等提权
- 【Linux 内核】Linux 内核源码几个重要的入口源文件及函数介绍 ( 系统初始化 | 内存管理 | 虚拟文件系统 | 网络管理 )
- 42.Linux应用调试-初步制作系统调用(用户态->内核态)
- linux重置core文件生成目录
- 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.2. 准备虚拟内核文件系统
- linux内核完全剖析——基于0.12内核-笔记(1)-CPU 数据通信
- Linux内核书籍
- 编译安装最新的Linux系统内核
- 七个基于 Fedora Linux 的优秀发行版
- 在 CentOS 8 中删除旧的 Linux 系统内核
- 过去十年间的Linux内核的贡献对比
- Linux系统内核正式进入5.0版本时代
- Linux tr命令使用方法
- 深入理解Linux内核-系统调用
- 【linux 下 cat 显示中间几行内容】
- 什么是Linux系统调用、内核模式和用户模式与Linux内核源代码分析
- 在Ubuntu上为Android系统编写Linux内核驱动程序
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)