linux的sysctl命令以及相关应用

一,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  系统调优

猜你喜欢

转载自blog.51cto.com/13667098/2104879
今日推荐