一, sysctl 命令简介
sysctl 命令被用于在内核运行时动态地修改内核的运行参数, 可用的内核参数在目录 / proc/sys 中. 它包含一些 TCP/ip 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能. 用 sysctl 可以读取设置超过五百个系统变量.
1.sysctl(选项)(参数)
选项:(详情可以 man sysctl)
-a all 查看所有内核参数变量和值
-w write 修改内核参数
-p 从配置文件 "/etc/sysctl.conf" 加载内核参数设置
参数:
变量 = 值: 设置内核参数对应的变量值.
2.sysctl 和 / proc/sys / 配置文件关系
sysctl 是修改内核参数的命令
/proc/sys / 是内存读取内核参数目录
sysctl 和 / proc/sys 对应规则:
去掉前面部分 / proc/sys, 将文件名中的斜杠变为点
例如:
- /proc/sys/net/ipv4/ip_forward = net.ipv4.ip_forward
- /proc/sys/kernel/hostname = kernel.hostname
这两条规则可以将 / proc/sys 中的任一文件名转换成 sysctl 中的变量名.
用 sysctl -w 或 echo xxx> /pro/sys/net/netfilter/xxx 做的修改在重启后会失效.
3.centos6 和 7 的配置文件
6 版本:/etc/sysctl.conf,7 版本: /etc/sysctl.d/99-sysctl.conf
可以编辑 / etc/sysctl.d / 下的配置文件 (旧系统是 / etc/sysctl.conf), 系统启动时会加载里面的设置.
[root@luc58 ~]# ll /etc/sysctl.d/99-sysctl.conf
lrwxrwxrwx. 1 root root 14 1 月 5 2017 /etc/sysctl.d/99-sysctl.conf -> ../sysctl.conf
- //sysctl.conf 和 99-sysctl.conf 是同一个文件, 只是链接而已
- ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
二, sysctl 命令使用
使用环境
[root@luc58 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo
1. 屏蔽别人 ping 你的主机 (布尔型用 1 来表示'yes', 用 0 来表示'no')
- [root@luc58 ~]# sysctl -a | grep icmp
- net.ipv4.icmp_echo_ignore_all = 0
- [root@luc58 ~]# sysctl -w net.ipv4.icmp_echo_ignore_all=1
- [root@luc58 ~]# sysctl -p
2./var/log/messages 日志出现 kernel: nf_conntrack: table full, dropping packet. 请问是什么原因导致的? 如何解决
原因:
服务器访问量大, 内核 netfilter 模块 conntrack 相关参数配置不合理, 导致新连接被丢掉.
分析:
nf_conntrack 模块用一个哈希表记录建立的连接, 连接进来比释放的快, 把哈希表塞满, 连接的数据包就会被丢掉, 导致拒绝服务. 调小建立和释放时间, 调大哈希表.
解决:
A, 重新设置 nf_conntrack 模块参数
- [root@luc58 ~]# echo 250000> /sys/module/nf_conntrack/parameters/hashsize // 设置哈希表大小
- [root@luc58 ~]# sysctl -w net.nf_conntrack_max = 1000000
- // 哈希表最大跟踪数 (一般是哈希表 4 倍)
- [root@luc58 ~]# sysctl -w net.netfilter.nf_conntrack_max = 1000000
- // 哈希表最大跟踪数
- [root@luc58 ~]# sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established = 300
- // 默认 432000 秒 (5 天) tcp 三次握手建立
- [root@luc58 ~]# sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 60
- // 默认 120 秒, 四次断开的主动断开一方, 第一和二次断开等待时间
- [root@luc58 ~]# sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait = 30
- // 默认 60 秒 , 四次断开, 被动断开一方, 第二次断开的出现的状态
- [root@luc58 ~]# sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60
- // 默认 120 秒 , 四次断开, 被动断开一方, 第四次断开的状态
B, 关闭防火墙 (不直接暴露在公网的主机)
- [root@luc58 ~]# systemctl stop firewalld
- [root@luc58 ~]# systemctl disable firewalld
3. 开启内核路由转发功能
- [root@luc58 ~]# sysctl -w net.ipv4.ip_forward=1
- net.ipv4.ip_forward = 1
4. 调整所有的进程可以打开的文件总数量 (web 调优可以使用)
- [root@luc58 ~]# sysctl -w fs.file-max=197900
- fs.file-max = 197900
共勉: I hear and I forget. I see and I remember. I do and I understand!
参考连接:
- https://blog.csdn.net/hytfly/article/details/53426630
- http://keyknight.blog.163.com/blog/static/3663784020104152407759/
https://blog.csdn.net/linuxnews/article/details/51178794 系统调优
来源: http://www.bubuko.com/infodetail-2566674.html