▲ 点击上方"DevOps和k8s全栈技术"关注公众号
Linux内核是Linux操作系统的核心,负责管理系统资源、硬件抽象、进程调度、内存管理等关键功能。随着技术的进步和应用需求的增加,Linux内核的优化变得愈发重要。通过对内核进行优化,可以提升系统性能、稳定性和安全性,为高负载和高并发的应用场景提供保障。
步骤 1: 获取内核源代码
首先,下载Linux内核源代码。你可以从内核官方网站下载指定版本。wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.20.tar.xz
tar -xvf linux-5.4.20.tar.xz
cd linux-5.4.20
步骤 2: 配置内核
内核配置是优化的关键步骤。你可以使用以下命令启动配置界面:关键配置选项:
- 启用高端内存支持 (High Memory Support)。
- 设置内核的时间频率 (100Hz, 250Hz, 1000Hz) 根据你的需求选择。
- 选择适合你的工作负载的文件系统 (如EXT4, XFS, BTRFS)。
- 启用高级文件系统功能 (如日志功能, 文件系统压缩)。
步骤 3: 编译和安装内核
make -j$(nproc)
make modules_install
make install
更新引导加载程序:
步骤 4: 优化内核参数
调整内核参数可以进一步优化系统性能。这些参数可以通过/etc/sysctl.conf
文件进行配置。
常见优化参数:
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
1)vm.swappiness
- 描述: 该参数控制内核将数据从物理内存交换到交换空间(swap)的倾向。
- 推荐值:
10
,表示在系统内存不足时才会适度使用交换空间,有助于提高系统性能。
2)vm.dirty_ratio
- 描述: 该参数定义了系统中可用内存的百分比,当超过这个值时,所有脏数据(尚未写入磁盘的数据)将被写入磁盘。
- 推荐值:
15
,表示当脏数据占用系统内存的15%时,系统会开始将这些数据写入磁盘。这有助于平衡内存使用和I/O性能。
3)vm.dirty_background_ratio
- 描述: 该参数定义了系统中可用内存的百分比,当超过这个值时,后台进程将开始异步地将脏数据写入磁盘。
- 推荐值:
5
,表示当脏数据占用系统内存的5%时,系统会在后台将这些数据写入磁盘。这有助于减少前台应用程序的I/O等待时间,改善系统响应性。
这些参数的配置有助于优化系统的内存管理和磁盘I/O性能:1)低 vm.swappiness
(10
):减少不必要的内存交换操作,保持系统的响应速度。2)适中的 vm.dirty_ratio
(15
):防止过多的脏数据积累在内存中,减少写入磁盘时的突发I/O操作。3)较低的 vm.dirty_background_ratio
(5
):确保系统在后台持续地将脏数据写入磁盘,避免前台应用程序因I/O操作而延迟。通过合理配置这些参数,可以在保持系统响应速度的同时,优化内存和磁盘I/O性能。义了系统允许同时打开的最大文件数。增加此值可以支持更多的并发文件操作,适用于高负载服务器和应用场景,避免因打开文件数达到上限而导致的文件操作错误。net.core.netdev_max_backlog = 5000
net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65535
1)net.core.netdev_max_backlog
- 描述: 定义网络接口接收队列的最大长度。当网络数据包处理速度跟不上接收速度时,这个参数会限制队列的长度。
- 适用场景: 适用于高网络流量的服务器,增加此值可以防止丢包。
2)net.core.somaxconn
- 描述: 定义系统中每个端口允许的最大监听队列长度。
- 适用场景: 适用于需要处理大量并发连接的服务器应用程序,如Web服务器或数据库服务器,增加此值可以减少连接被拒绝的情况。
3)net.ipv4.tcp_tw_reuse
- 描述: 允许TCP连接在TIME_WAIT状态下被重用。
- 适用场景: 适用于需要快速建立和关闭TCP连接的场景,如Web服务器,有助于减少TIME_WAIT状态的连接数。
4)net.ipv4.tcp_max_syn_backlog
- 描述: 定义TCP连接请求(SYN队列)的最大等待队列长度。
- 适用场景: 适用于需要处理大量新建TCP连接的服务器,增加此值可以减少连接请求被拒绝的情况。
5)net.ipv4.tcp_fin_timeout
- 描述: 定义TCP连接在发送FIN包后等待对方确认的时间,单位为秒。
- 适用场景: 适用于需要快速释放连接资源的服务器,减少此值可以更快地释放未完全关闭的连接。
6)net.ipv4.ip_local_port_range
- 描述: 定义本地端口的动态分配范围,包含起始和结束端口。
- 适用场景: 适用于需要大量临时端口的服务器应用程序,如负载均衡器和高并发服务器,扩大此范围可以支持更多的并发连接。
持续监控系统性能,使用工具如top, htop, iotop, netstat, vmstat等,找出瓶颈并进行调整。Linux内核优化是一个复杂而深入的过程,需要结合系统实际需求和硬件环境进行综合考虑。通过合理的优化,可以显著提升系统的性能、稳定性和安全性,为高效运行提供坚实的基础。随着技术的不断发展,新的优化技术和工具也在不断涌现,为内核优化提供了更多可能性和选择。 点赞和关注,服务器10年不宕机