内核参数调优

教学目标

  • 了解Linux内核参数的基本概念和重要性
  • 掌握内核参数的查看和修改方法
  • 熟悉常见内核参数的作用和调优原则
  • 学会根据系统需求进行有针对性的内核调优
  • 掌握内核参数调优的测试和验证方法
  • 了解内核参数调优的最佳实践和常见误区

主要知识点

  • 内核参数概述
  • 内核参数的查看和修改方法
  • 网络相关内核参数调优
  • 内存管理内核参数调优
  • 文件系统内核参数调优
  • 进程管理内核参数调优
  • 内核参数调优的测试和验证
  • 内核参数调优的最佳实践

实用案例分析

案例1:内核参数的基本操作

场景:查看和临时修改Linux内核参数。

操作步骤

# 查看所有内核参数
sysctl -a

# 查看特定内核参数
sysctl net.ipv4.tcp_fin_timeout
sysctl vm.swappiness

# 临时修改内核参数
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w vm.swappiness=10

# 查看修改后的参数值
sysctl net.ipv4.tcp_fin_timeout
sysctl vm.swappiness

# 通过/proc文件系统查看内核参数
cat /proc/sys/net/ipv4/tcp_fin_timeout
cat /proc/sys/vm/swappiness

# 通过/proc文件系统修改内核参数
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 10 > /proc/sys/vm/swappiness

# 使修改的内核参数立即生效
sysctl -p

案例2:网络相关内核参数调优

场景:优化Linux服务器的网络性能,提高网络吞吐量和连接处理能力。

操作步骤

# 编辑sysctl.conf文件
vim /etc/sysctl.conf

# 添加网络相关内核参数

# 提高套接字监听队列大小
net.core.somaxconn = 65535

# 提高TCP最大连接数
net.ipv4.tcp_max_syn_backlog = 65535

# 减少TCP连接超时时间
net.ipv4.tcp_fin_timeout = 30

# 优化TCP keepalive参数
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15

# 启用TCP快速打开
net.ipv4.tcp_fastopen = 3

# 启用TCP SYN cookies
net.ipv4.tcp_syncookies = 1

# 优化TCP拥塞控制算法
net.ipv4.tcp_congestion_control = cubic

# 提高系统文件描述符限制
fs.file-max = 655350

# 提高每个进程的文件描述符限制
fs.nr_open = 655350

# 应用内核参数
sysctl -p

# 验证网络参数是否生效
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog

案例3:内存管理内核参数调优

场景:优化Linux服务器的内存管理,提高内存使用效率,减少内存碎片。

操作步骤

# 编辑sysctl.conf文件
vim /etc/sysctl.conf

# 添加内存管理相关内核参数

# 优化交换空间使用策略
vm.swappiness = 10

# 优化内存过度分配策略
vm.overcommit_memory = 1
vm.overcommit_ratio = 50

# 优化内存回收策略
vm.vfs_cache_pressure = 50

# 优化脏页写回策略
vm.dirty_background_ratio = 5
vm.dirty_ratio = 10
vm.dirty_writeback_centisecs = 100
vm.dirty_expire_centisecs = 3000

# 优化内存碎片整理
vm.extra_free_kbytes = 1048576
vm.min_free_kbytes = 65536

# 应用内核参数
sysctl -p

# 验证内存参数是否生效
sysctl vm.swappiness
sysctl vm.overcommit_memory

# 查看内存使用情况
free -h

# 查看内存碎片情况
cat /proc/buddyinfo

案例4:文件系统内核参数调优

场景:优化Linux服务器的文件系统性能,提高文件读写速度和I/O吞吐量。

操作步骤

# 编辑sysctl.conf文件
vim /etc/sysctl.conf

# 添加文件系统相关内核参数

# 提高文件系统最大文件句柄数
fs.file-max = 655350

# 提高文件系统目录缓存
fs.dir_notify_enable = 1

# 优化EXT4文件系统
# 启用EXT4延迟分配
vm.laptop_mode = 0

# 应用内核参数
sysctl -p

# 优化磁盘I/O调度算法
# 查看当前I/O调度算法
cat /sys/block/sda/queue/scheduler

# 修改I/O调度算法为deadline
echo deadline > /sys/block/sda/queue/scheduler

# 永久修改I/O调度算法
# 编辑grub配置文件
vim /etc/default/grub

# 在GRUB_CMDLINE_LINUX中添加
GRUB_CMDLINE_LINUX="elevator=deadline"

# 更新grub配置
# CentOS/RHEL
grub2-mkconfig -o /boot/grub2/grub.cfg
# Debian/Ubuntu
update-grub

# 优化磁盘预读
# 查看当前预读值
blockdev --getra /dev/sda

# 设置预读值为1024
blockdev --setra 1024 /dev/sda

# 永久设置预读值
# 添加到/etc/rc.local
vim /etc/rc.local

# 添加以下内容
blockdev --setra 1024 /dev/sda

# 设置执行权限
chmod +x /etc/rc.local

案例5:进程管理内核参数调优

场景:优化Linux服务器的进程管理,提高进程调度效率和系统响应速度。

操作步骤

# 编辑sysctl.conf文件
vim /etc/sysctl.conf

# 添加进程管理相关内核参数

# 提高进程最大数
kernel.pid_max = 65536

# 优化进程调度策略
kernel.sched_autogroup_enabled = 0

# 提高系统信号队列大小
kernel.msgmax = 65536
kernel.msgmnb = 65536

# 提高共享内存限制
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

# 应用内核参数
sysctl -p

# 验证进程参数是否生效
sysctl kernel.pid_max
sysctl kernel.msgmax

# 优化进程优先级
# 查看进程优先级
ps -eo pid,ppid,ni,cmd | head -10

# 修改进程优先级
nice -n -10 command

# 实时修改进程优先级
renice -10 -p 1234

# 查看系统负载
uptime

# 查看进程调度信息
cat /proc/sched_debug | head -50

案例6:内核参数调优的测试和验证

场景:测试和验证内核参数调优的效果,确保调优后的系统性能符合预期。

操作步骤

# 网络性能测试
# 安装网络测试工具
yum install -y iperf3  # CentOS/RHEL
apt install -y iperf3  # Debian/Ubuntu

# 启动iperf3服务端
iperf3 -s

# 在客户端进行测试
iperf3 -c server_ip -t 60 -P 10

# 内存性能测试
# 安装内存测试工具
yum install -y memtester  # CentOS/RHEL
apt install -y memtester  # Debian/Ubuntu

# 测试内存性能
memtester 1024 5

# 文件系统性能测试
# 安装文件系统测试工具
yum install -y fio  # CentOS/RHEL
apt install -y fio  # Debian/Ubuntu

# 创建测试配置文件
vim fio_test.conf

# 配置内容
[global]
direct=1
iodepth=128
rw=randrw
rwmixread=70
size=10G
bs=4k
numjobs=4
runtime=60
group_reporting
name=randrw-test

[test]
fname=/mnt/testfile

# 运行测试
fio fio_test.conf

# 系统整体性能测试
# 安装系统性能测试工具
yum install -y sysstat  # CentOS/RHEL
apt install -y sysstat  # Debian/Ubuntu

# 运行vmstat监控系统状态
vmstat 1

# 运行iostat监控磁盘I/O
iostat -dx 1

# 运行mpstat监控CPU使用情况
mpstat -P ALL 1

# 运行sar收集系统性能数据
sar -u 1 60 > cpu_usage.txt
sar -r 1 60 > memory_usage.txt
sar -n DEV 1 60 > network_usage.txt

课后练习

  1. 基础练习

    • 查看和临时修改Linux内核参数
    • 配置网络相关内核参数,提高网络性能
    • 测试内核参数调优前后的网络性能差异
  2. 进阶练习

    • 配置内存管理内核参数,优化内存使用
    • 配置文件系统内核参数,提高I/O性能
    • 编写内核参数调优脚本,实现自动化调优
  3. 实践任务

    • 针对Web服务器进行全面的内核参数调优
    • 针对数据库服务器进行有针对性的内核参数调优
    • 设计内核参数调优方案,并进行测试验证

总结

本章节详细介绍了Linux系统内核参数的调优方法,包括:

  1. 内核参数概述:了解内核参数的基本概念和重要性,认识到合理的内核调优对系统性能的影响
  2. 内核参数的查看和修改方法:掌握sysctl命令和/proc文件系统的使用
  3. 网络相关内核参数调优:优化网络连接处理能力和吞吐量
  4. 内存管理内核参数调优:提高内存使用效率,减少内存碎片
  5. 文件系统内核参数调优:优化文件读写速度和I/O吞吐量
  6. 进程管理内核参数调优:提高进程调度效率和系统响应速度
  7. 内核参数调优的测试和验证:使用专业工具测试调优效果
  8. 内核参数调优的最佳实践:了解不同场景下的调优策略和常见误区

内核参数调优是一项需要经验和耐心的工作,需要根据系统的具体用途、硬件配置和负载情况进行有针对性的调整。在调优过程中,应遵循"小步调整,逐步验证"的原则,避免一次性修改过多参数导致系统不稳定。同时,应建立完善的测试和监控机制,及时发现和解决调优过程中出现的问题。

通过合理的内核参数调优,可以显著提高Linux系统的性能和稳定性,为应用程序提供更好的运行环境,从而提升整个系统的价值和用户体验。

« 上一篇 系统配置文件 下一篇 » 系统时间管理