您的位置:

Sysctl:从多个方面详解

一、sysctl w

使用sysctl可以查询和修改Linux内核的运行参数。sysctl w 是指强制系统立刻写入内核变量的值,而不是等待系统重启后再生效。在需要立即更新内核参数的场合,可以使用sysctl w命令。

# 修改内核参数
$ sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096

# 立即生效 
$ sudo sysctl -p

以上示例中,我们通过sysctl命令修改了TCP的最大Syn Backlog队列长度,然后立即生效。

二、sysctl p

有时我们需要查询并修改和某个目录相关的内核参数,这时可以使用sysctl p命令。必须指定要查询或修改的目录路径。

# 查看与网络相关的所有内核参数
$ sudo sysctl -p /proc/sys/net

以上示例中,我们指定了要查询的目录为/proc/sys/net,命令会返回所有跟网络相关的内核参数。

三、sysctl.conf

sysctl.conf文件是Linux内核参数配置文件,位于 /etc/sysctl.conf。在这个文件中,可以将需要配置的内核参数添加进去,系统启动时会根据此文件中的参数进行设置。我们可以根据需要修改sysctl.conf文件,改变内核的默认设置。

# 打开sysctl.conf文件
$ sudo nano /etc/sysctl.conf

# 修改参数
net.ipv4.tcp_max_syn_backlog=4096

# 保存退出

# 立即生效 
$ sudo sysctl -p

以上示例中,我们打开了sysctl.conf文件,并修改了TCP的最大Syn Backlog队列长度为4096,并保存退出。然后使用sysctl -p命令让修改立即生效。

四、TCP参数

除了示例中提到的TCP的最大Syn Backlog队列长度通过sysctl修改以外,还有很多TCP相关的内核参数可以通过sysctl进行配置。下面列出几个常用的TCP参数:

# SYN队列的长度
net.ipv4.tcp_max_syn_backlog=1024

# IP数据包转发功能
net.ipv4.ip_forward=1

# TCP SYN cookie保护
net.ipv4.tcp_syncookies=1

# 避免TIME_WAIT的数量过大,使用TIME-WAIT连接重用
net.ipv4.tcp_tw_reuse=1

# 单个TCP连接的最大数据包数量
net.ipv4.tcp_max_orphans=262144

五、内存管理相关的参数

内存管理是Linux系统中非常重要的部分,也有很多内核参数可以通过sysctl进行调整。下面列出几个常用的内存管理相关的参数:

# 虚拟内存最大占用量限制,单位为bytes
vm.overcommit_memory=2

# 系统内存释放行为
vm.drop_caches=3

# 共享内存最大值,单位为bytes
kernel.shmmax=33554432

# 共享内存最大段数
kernel.shmall=2097152

六、网络性能相关的参数

网络性能是使用Linux系统的重要领域之一。下面列举了几个常用的网络性能相关的内核参数:

# 启动SYN Cookie保护,可防止网络攻击中的SYN泛洪攻击
net.ipv4.tcp_syncookies=1

# 允许TCP和UDP端口复用
net.ipv4.ip_local_port_range = 1024 65000

# TCP keepalive时间间隔, 单位为秒
net.ipv4.tcp_keepalive_time=120

# 连接超时时间,单位为秒
net.ipv4.tcp_fin_timeout=30

# 接受空闲连接的重试间隔,单位为秒
net.ipv4.tcp_keepalive_intvl=15

七、系统调用相关的参数

下面列举了几个常用的系统调用相关的内核参数:

# 提高系统的内存回收速度  
vm.swappiness=0

# 打开Orphan端口reuse功能
net.ipv4.tcp_orphan_retries=3

# 提高进程可打开文件的最大数目
fs.file-max=65535

# 允许进程使用更多的内存,单位为bytes
kernel.pid_max = 4194303

八、总结

本文通过几个方面详细地阐述了sysctl的使用方法,并给出了一些常见的内核参数的配置示例。sysctl可以有效地提高Linux系统的稳定性和性能。