前言
一、/proc/sys/目录
- /proc/sys/目录下存放着当前操作系统内核的相关配置参数
-
默认目录如下所示,其中:
- abi:应用的二进制信息
- debug:调试相关的系统配置目录
- dev:设备相关的系统配置目录
- fs:文件系统相关的系统配置目录
- kernel:内核相关的系统配置目录
- net:网络相关的系统配置目录
- user:用户相关的系统配置目录
- vm:内存相关的系统配置目录
与/etc/sysctl.conf配置文件的关系
-
在/etc/sysctl.conf配置文件中也可以配置内核参数,/etc/sysctl.conf中配置的参数就是/proc/sys/目录下对应文件的内容。当在/etc/sysctl.conf配置文件中设置了配置参数,并且使用sysctl -p命令生效之后,/etc/sysctl.conf配置文件中的内容就会被更新到/proc/sys/对应的文件中(关于演示案例和sysctl命令,请参阅文章最后的演示案例)
-
例如:在/etc/sysctl.conf配置文件中kernel.sysrq的值为1,那么在/proc/sys/的kernel目录下就会有一个sysrq文件,其值为1
-
备注:在/etc/sysctl.conf中配置之后,需要使用sysctl -p命令加载才可以将配置的值更新到/proc/sys/目录对应的文件中
比较常用的几个参数
-
nr_open:单个进程打开文件句柄数上限。默认值为1048576(1024*1024)
-
file-max:下面的配置指定了系统范围内所有进程可打开的文件句柄的数量限制(系统级别,kernel-level)。默认值为180566
-
ip_local_port_range:定义了本地tcp/udp的端口范围。可以理解为系统中的程序会选择这个范围内的端口来连接到目的端口(目的端口当然是用户指定的
二、/etc/sysctl.conf配置文件
-
功能:用于控制内核相关的配置参数
- 本人系统默认配置如下:
与/proc/sys/目录的关系
- 在/etc/sysctl.conf配置文件中配置了参数之后,需要使用sysctl -p命令将/etc/sysctl.conf配置文件的内容更新到/proc/sys/目录对应的文件中(上面已经介绍过了)
-
备注:光修改/etc/sysctl.conf配置文件是没有用的,还需要使用sysctl -p命令将/etc/sysctl.conf配置文件的内容加载到/proc/sys/目录对应的文件中
在百万并发服务器中常用的几个配置
fs.nr_open
-
file-max:下面的配置指定了系统范围内所有进程可打开的文件句柄的数量限制(系统级别,kernel-level)
fs.file-max
- ip_local_port_range:定义了本地tcp/udp的端口范围。可以理解为系统中的程序会选择这个范围内的端口来连接到目的端口(目的端口当然是用户指定的
net.ipv4.ip_local_port_range = 32768 59000
三、sysctl命令
- sysctl命令用于运行时配置内核参数,其修改的参数就是位于/proc/sys目录的文件的内容
-
sysctl的设置只在本次会话生效,当系统重启(必须是重启而不是当前会话重启)之后,其修改的内容就会回到之前的内容
-
如果想要永久修改:请将配置参数写入/etc/sysctl.conf配置文件中,然后使用sysctl -p命令将/etc/sysctl.conf配置文件的内容加载到/proc/sys/目录对应的文件中
命令格式
sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p <filename> (default /etc/sysctl.conf)
sysctl [-n] [-e] -a
-
相关参数如下:
- -w 临时改变某个指定参数的值,如
- -p:从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
- -a 显示所有的系统参数
- 例如下面查看当先所有的系统参数(内容太多,截取部分)
演示案例
-
第一步:我们只使用sysctl命令修改file-max参数,将所有进程可打开的文件句柄的数量修改为1048576。并且查看/proc/sys/fs/file-max文件可以显示修改成功
sudo sysctl -w fs.file-max=1048576
cat /proc/sys/fs/file-max
-
第二步:然后我们重新启动系统(必须重启,关闭会话不算),查看/proc/sys/fs/file-max文件发现回到原来的默认值了
-
第三步:现在我们修改/etc/sysctl.conf文件,在里面修改file-max的值为1048576,然后保存退出
-
第四步:由于还没有使用sysctl命令将/etc/sysctl.conf文件的内容更新到/proc/sys/fs/file-max中,所以查看还是显示180566
-
第五步:使用下面的sysctl命令将/etc/sysctl.conf文件的内容更新到/proc/sys/fs/file-max中生效,命令执行完之后查看/proc/sys/fs/file-max文件,更新成功
sudo sysctl -p
-
第六步:当我们重启之后,上面的配置仍然有效不会消失