Linux 内核配置

    命令用于为当前shell会话设置资源阈值,注意事项如下:

    • ulimit所做的更改仅对当前会话或子进程生效。

    • 资源的阈值(软阈值)不能超过硬阈值。

    • 普通用户不能使用命令调整硬阈值,即使使用sudo也不能调整。

    • 修改系统级别或调整硬性阈值,请编辑文件/etc/security/limits.conf。这种方式需要重新登录才生效。

    ulimit -c

    ulimit -c用于限制core文件的大小,建议设置为unlimited,命令如下:

    ulimit -n

    ulimit -n用于限制打开文件的数量,建议设置为超过10万,例如:

    vm.swappiness

    vm.swappiness是触发虚拟内存(swap)的空闲内存百分比。值越大,使用swap的可能性就越大,建议设置为0,表示首先删除页缓存。需要注意的是,0表示尽量不使用swap。

    vm.min_free_kbytes

    vm.max_map_count

    vm.max_map_count用于限制单个进程的VMA(虚拟内存区域)数量。默认值为65530,对于绝大多数应用程序来说已经足够。如果应用程序因为内存消耗过大而报错,请增大本参数的值。

    vm.dirty_*是一系列控制系统脏数据缓存的参数。对于写密集型场景,用户可以根据需要进行调整(吞吐量优先或延迟优先),建议使用系统默认值。

    Transparent huge page

    为了降低延迟,用户必须关闭THP(transparent huge page)。命令如下:

    net.ipv4.tcp_slow_start_after_idle

    net.ipv4.tcp_slow_start_after_idle默认值为1,会导致闲置一段时间后拥塞窗口超时,建议设置为,尤其适合大带宽高延迟场景。

    net.core.somaxconn

    net.core.somaxconn用于限制socket监听的连接队列数量。默认值为128。对于有大量突发连接的场景,建议设置为不低于1024

    net.ipv4.tcp_max_syn_backlog

    net.ipv4.tcp_max_syn_backlog用于限制处于SYN_RECV(半连接)状态的TCP连接数量。默认值为128。对于有大量突发连接的场景,建议设置为不低于1024

    net.core.netdev_max_backlog

    net.core.netdev_max_backlog用于限制队列中数据包的数量。默认值为1000,建议设置为10000以上,尤其是万兆网卡。

    net.ipv4.tcp_keepalive_*是一系列保持TCP连接存活的参数。对于使用四层透明负载均衡的应用程序,如果空闲连接异常断开,请增大tcp_keepalive_timetcp_keepalive_intvl的值。

    net.ipv4.tcp_wmem/rmem

    scheduler

    对于SSD设备,建议将设置为noop或者none,路径为/sys/block/DEV_NAME/queue/scheduler

    kernel.core_pattern

    建议设置为core,并且将kernel.core_uses_pid设置为1

    sysctl命令

    • sysctl <conf_name>

      查看当前参数值。

    • sysctl -w <conf_name>=<value>

      临时修改参数值,立即生效,重启后恢复原值。

    prlimit