sysctl
是一个用于读取和修改 Linux 内核参数的工具。这些参数控制着内核的行为和性能,因此通过调整它们可以优化系统的运行效率或解决特定问题。
在使用 sysctl
前,了解其默认值以及当前系统中已设置的值是很有帮助的。可以通过以下命令查看当前内核参数及其状态:
sysctl -a | less
或者只查看特定类别如文件描述符、进程限制等:
sysctl fs.file-max
sysctl kernel.pid_max
sysctl
参数fs.file-max: 系统中可打开的最大文件句柄数。
sysctl -w fs.file-max=50000
fs.nr_open: 用户进程可以打开的最多文件数量。
sysctl -w fs.nr_open=2560
vm.swappiness: 控制内核在何时交换到磁盘以释放内存。值越小表示系统更倾向于使用物理内存。
sysctl -w vm.swappiness=10
vm.overcommit_memory: 决定内核如何处理内存超分配。设置为 2 时,所有请求均被拒绝;设置为 1 时,对于多页的申请只检查第一个页框。
sysctl -w vm.overcommit_memory=2
net.core.somaxconn: 可以连接到监听套接字的最大请求数量(队列长度)。
sysctl -w net.core.somaxconn=4096
net.ipv4.tcp_syncookies: 当 TCP 接收过多的 SYN 报文时启用 SYN Cookie 机制,防止拒绝服务攻击。
sysctl -w net.ipv4.tcp_syncookies=1
kernel.pid_max: 系统中可创建的最大进程数。
sysctl -w kernel.pid_max=32768
kernel.msgmnb / kernel.msgmax: 消息队列的最大消息大小和总数量。
sysctl -w kernel.msgmnb=65536
net.ipv4.tcp_fin_timeout: 控制关闭连接时 FIN 等待的秒数,以加快资源释放。
sysctl -w net.ipv4.tcp_fin_timeout=10
vm.dirty_ratio / vm.dirty_background_ratio: 决定多少脏页(未同步到磁盘的修改)被允许。当超过 dirty_ratio
时,系统会等待至少背景比例的延迟。
sysctl -w vm.dirty_ratio=20
使用 sysctl
命令临时更改参数后,这些修改在重启后不会保留。若要使它们持久化,需要添加配置到 /etc/sysctl.conf
文件中:
echo "fs.file-max = 50000" >> /etc/sysctl.conf
然后通过 sysctl -p
应用所有定义的参数。
通过上述示例与配置技巧,你可以更好地利用 sysctl
管理 Linux 内核参数并优化系统性能。