深度探索:Linux内核优化高级指南

科技   2024-08-03 13:48   黑龙江  

 点击上方"DevOps和k8s全栈技术"关注公众号



Linux内核是Linux操作系统的核心,负责管理系统资源、硬件抽象、进程调度、内存管理等关键功能。随着技术的进步和应用需求的增加,Linux内核的优化变得愈发重要。通过对内核进行优化,可以提升系统性能、稳定性和安全性,为高负载和高并发的应用场景提供保障。


Linux内核优化步骤如下:

步骤 1: 获取内核源代码

首先,下载Linux内核源代码。你可以从内核官方网站下载指定版本。
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.20.tar.xztar -xvf linux-5.4.20.tar.xzcd linux-5.4.20


步骤 2: 配置内核

内核配置是优化的关键步骤。你可以使用以下命令启动配置界面:
make menuconfig

关键配置选项:

  1. 处理器类型和功能:
  • 确保选择了与你的CPU架构相匹配的选项。
  • 内存管理:
    • 启用高端内存支持 (High Memory Support)。
    • 调整交换空间 (Swap Space) 设置。
  • 调度器和时间频率:
    • 选择合适的调度器(如CFS调度器)。
    • 设置内核的时间频率 (100Hz, 250Hz, 1000Hz) 根据你的需求选择。
  • 网络设置:
    • 启用高性能网络选项 (如TCP/IP优化)。
    • 启用网络安全功能 (如iptables)。
  • 文件系统:
    • 选择适合你的工作负载的文件系统 (如EXT4, XFS, BTRFS)。
    • 启用高级文件系统功能 (如日志功能, 文件系统压缩)。



    步骤 3: 编译和安装内核

    配置完成后,编译并安装内核:
    make -j$(nproc)make modules_installmake install

    更新引导加载程序:

    更新Grub或其他引导加载程序以使用新内核。
    update-grub

    步骤 4: 优化内核参数

    调整内核参数可以进一步优化系统性能。这些参数可以通过/etc/sysctl.conf文件进行配置。


    常见优化参数:

    1、虚拟内存:
    vm.swappiness = 10vm.dirty_ratio = 15vm.dirty_background_ratio = 5
    参数解释说明:

    1)vm.swappiness

    • 描述: 该参数控制内核将数据从物理内存交换到交换空间(swap)的倾向。
    • 值范围: 0-100
      • 0: 尽量避免使用交换空间,除非绝对必要。
      • 100: 更积极地使用交换空间。
    • 推荐值: 10,表示在系统内存不足时才会适度使用交换空间,有助于提高系统性能。

    2)vm.dirty_ratio

    • 描述: 该参数定义了系统中可用内存的百分比,当超过这个值时,所有脏数据(尚未写入磁盘的数据)将被写入磁盘。
    • 值范围: 0-100(百分比)
    • 推荐值: 15,表示当脏数据占用系统内存的15%时,系统会开始将这些数据写入磁盘。这有助于平衡内存使用和I/O性能。

    3)vm.dirty_background_ratio

    • 描述: 该参数定义了系统中可用内存的百分比,当超过这个值时,后台进程将开始异步地将脏数据写入磁盘。
    • 值范围: 0-100(百分比)
    • 推荐值: 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性能。

    2、文件系统:
    fs.file-max = 2097152
    参数解释说明:
    义了系统允许同时打开的最大文件数。增加此值可以支持更多的并发文件操作,适用于高负载服务器和应用场景,避免因打开文件数达到上限而导致的文件操作错误。

    3、网络优化:
    net.core.netdev_max_backlog = 5000net.core.somaxconn = 1024net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_max_syn_backlog = 2048net.ipv4.tcp_fin_timeout = 30net.ipv4.ip_local_port_range = 1024 65535
    参数解释说明:

    1)net.core.netdev_max_backlog

    • 描述: 定义网络接口接收队列的最大长度。当网络数据包处理速度跟不上接收速度时,这个参数会限制队列的长度。
    • 推荐值: 5000
    • 适用场景: 适用于高网络流量的服务器,增加此值可以防止丢包。

    2)net.core.somaxconn

    • 描述: 定义系统中每个端口允许的最大监听队列长度。
    • 推荐值: 1024
    • 适用场景: 适用于需要处理大量并发连接的服务器应用程序,如Web服务器或数据库服务器,增加此值可以减少连接被拒绝的情况。

    3)net.ipv4.tcp_tw_reuse

    • 描述: 允许TCP连接在TIME_WAIT状态下被重用。
    • 推荐值: 1(启用)
    • 适用场景: 适用于需要快速建立和关闭TCP连接的场景,如Web服务器,有助于减少TIME_WAIT状态的连接数。

    4)net.ipv4.tcp_max_syn_backlog

    • 描述: 定义TCP连接请求(SYN队列)的最大等待队列长度。
    • 推荐值: 2048
    • 适用场景: 适用于需要处理大量新建TCP连接的服务器,增加此值可以减少连接请求被拒绝的情况。

    5)net.ipv4.tcp_fin_timeout

    • 描述: 定义TCP连接在发送FIN包后等待对方确认的时间,单位为秒。
    • 推荐值: 30
    • 适用场景: 适用于需要快速释放连接资源的服务器,减少此值可以更快地释放未完全关闭的连接。

    6)net.ipv4.ip_local_port_range

    • 描述: 定义本地端口的动态分配范围,包含起始和结束端口。
    • 推荐值: 1024 65535
    • 适用场景: 适用于需要大量临时端口的服务器应用程序,如负载均衡器和高并发服务器,扩大此范围可以支持更多的并发连接。

    应用这些设置:
    sysctl -p

    步骤 5: 持续监控和调优
    持续监控系统性能,使用工具如top, htop, iotop, netstat, vmstat等,找出瓶颈并进行调整。

    常用监控工具:
    top 和 htop:监控CPU和内存使用。
    iotop:监控磁盘I/O使用情况。
    netstat:监控网络连接和流量。
    vmstat:监控系统虚拟内存和整体性能。

    Linux内核优化是一个复杂而深入的过程,需要结合系统实际需求和硬件环境进行综合考虑。通过合理的优化,可以显著提升系统的性能、稳定性和安全性,为高效运行提供坚实的基础。随着技术的不断发展,新的优化技术和工具也在不断涌现,为内核优化提供了更多可能性和选择。


    本月精彩文章推荐

           点赞和关注,服务器10年不宕机

    DevOps和k8s全栈技术
    专注于DevOps,Kubernetes,Linux,Docker,istio,微服务,Spring Cloud,python,go,数据库,Nginx,Tomcat,云计算等技术分享~
     最新文章