1. 内存管理优化
vm.swappiness
作用: 控制内核在物理内存使用满时,交换(swap)到磁盘的频率。数值越高,越倾向于交换数据,数值越低,内存压力更大时才会进行交换。
推荐值: 通常设置为 10-60(默认 60)
,对于内存密集型应用(如数据库)
建议将此值设低。
命令: sysctl -w vm.swappiness=10
vm.dirty_background_ratio 和 vm.dirty_ratio
作用: 控制脏页(dirty pages,已修改但未写回磁盘的数据)
的最大比例。vm.dirty_background_ratio 定义了系统开始将脏页刷写到磁盘的触发阈值,而 vm.dirty_ratio 则是写操作的上限。
推荐值: vm.dirty_background_ratio = 10,vm.dirty_ratio = 20-40
命令:
sysctl -w vm.dirty_background_ratio=10
sysctl -w vm.dirty_ratio=20
vm.min_free_kbytes
作用: 指定内核保留的一定量的内存,用于防止系统内存完全耗尽,避免系统进入 OOM(Out of Memory)
状态。
推荐值: 通常设置为系统总内存的 1%-2%
,也可以根据系统实际情况调整。
命令: sysctl -w vm.min_free_kbytes=65536
vm.overcommit_memory:
作用: 控制内存分配的策略。该参数有三个值:
允许内存过度提交,但内存分配时会检查内存是否足够。
总是允许内存过度提交(不检查实际的内存)。
禁止内存过度提交,分配内存时需要考虑实际内存。
推荐值: vm.overcommit_memory = 2
适用于大部分生产环境,特别是在运行数据库等内存密集型应用时。
命令: sysctl -w vm.overcommit_memory=2
2. 进程调度优化
kernel.sched_latency_ns
作用: 控制调度器延迟(任务调度时的最大延迟)。该参数决定了调度器在处理实时任务时的延迟。
推荐值: 适用于需要低延迟的场景,默认值通常已足够。
命令: sysctl -w kernel.sched_latency_ns=5000000(5ms)
kernel.sched_min_granularity_ns
作用: 控制 CPU 时间片的最小粒度。该参数决定了调度器给每个任务分配的最小时间。
推荐值: sysctl -w kernel.sched_min_granularity_ns=20000000(20ms)
kernel.sched_wakeup_granularity_ns
作用: 定义一个进程被唤醒时,它被重新调度的时间间隔。适用于减少高负载系统中的上下文切换。
推荐值: sysctl -w kernel.sched_wakeup_granularity_ns=15000000(15ms)
kernel.sched_tunable_scaling
作用: 启用动态调整调度器参数的功能,用于自动根据系统负载优化调度器行为。
推荐值: sysctl -w kernel.sched_tunable_scaling=1
3. 文件系统优化
vm.vfs_cache_pressure
作用: 控制内核回收用于缓存