• 使用sysctl调优Linux内核


    概述

    Linux内核包含了大约1000个可调节的参数。这些参数的默认取值适合于一般的使用场景,这也意味着它们并非对每个人都是十全十美的。

    • sysctl命令适用于所有的Linux系统。你必须以root的身份才能修改内核参数。

    • 该命令可以立刻改变参数值,但除非将参数定义在/etc/sysctl.conf中,否则重启之后,修改过的值又会恢复原样。

    • 最好是在修改sysctl.conf之前先进行测试。如果将错误的值写入/etc/sysctl.conf,会导致系统无法启动。

    实战

    sysctl支持下列选项。
    ❏ -a:输出所有的参数。
    ❏ -p FILENAME:从FILENAME中读入值。默认从/etc/sysctl.conf中读取。
    ❏ PARAM:输出PARAM的当前值。
    ❏ PARAM=NEWVAL:设置PARAM的值。

    1.任务调度器调优

    任务调度器是针对桌面环境优化的,在这种环境下,快速响应用户操作要比整体效率更重要。延长任务的切换间隔能够提高服务器系统的性能。查看kernel.sched_migration_cost_ns的值:
    在这里插入图片描述
    kernel.sched_migration_cost_ns(在比较旧的内核中是kernel.sched_migration n_cost)控制着任务在被切换之前能够保持活跃状态的时长。在拥有着大量任务或线程的系统中,这会导致大量的开销耗费在上下文切换上。默认值500000纳秒对于运行Postgres或Apache服务器的系统无疑是过小了。建议将这个值修改为5微秒:

    sysctl kernel.sched_migration_cost_ns=5000000
    
    • 1

    Postgres服务器取消参数sched_autogroup_enabled的设置能够提高性能。

    2.网络调优

    对于需要执行大量网络操作的系统(NFS客户端、NFS服务器等)而言,网络缓存的默认值可能过小了。
    检查读缓存的最大值:

    [root@meta /etc/prometheus/targets]#sysctl net.core.rmem_max
    net.core.rmem_max = 4194304
    
    
    • 1
    • 2
    • 3

    增加缓存大小:

            # sysctlnet.core.rmem_max=16777216        
            # sysctlnet.core.wmem_max=16777216        
            # sysctl net.ipv4.tcp_rmem="40968738016777216"        
            # sysctl net.ipv4.tcp_wmem="40966553616777216"        
            # sysctl net.ipv4.tcp_max_syn_backlog=4096
    
    • 1
    • 2
    • 3
    • 4
    • 5

    原理

    sysctl命令可以直接访问内核参数。在大多数发行版中,这些参数默认都是针对普通工作站优化的。如果系统内存容量大,可以增加缓冲区的值来提高性能;如果内存不足,可以减少缓存区的值。如果系统作为服务器,可以将任务切换间隔值设置的比单用户工作站长一些。

  • 相关阅读:
    如何绘制思维导图
    基于XML配置的AOP
    (分布式缓存)Redis哨兵
    【优选算法系列】第一节.双指针(283. 移动零和1089. 复写零)
    4.1.2 类非静态成员函数返回值转换与NRV优化
    Python(13)正则表达式简述
    Java—常用API
    Java 浅析线程池ThreadPoolExecutor
    动态内存开辟(上)
    深度学习之 10 卷积神经网络2
  • 原文地址:https://blog.csdn.net/MyySophia/article/details/126664107