优化前需通过以下命令收集CPU核心参数,为后续调整提供依据:
cat /proc/cpuinfo:显示详细的CPU信息(型号、频率、缓存大小、核心/线程数、支持的指令集如SSE/AVX等);lscpu:结构化输出CPU架构、物理核心数、逻辑核心数、NUMA节点配置等,更易阅读;grep 'physical id' /proc/cpuinfo | sort | uniq | wc -l;grep 'processor' /proc/cpuinfo | wc -l;grep 'model name' /proc/cpuinfo、grep 'cpu MHz' /proc/cpuinfo;grep 'cache size' /proc/cpuinfo;grep 'flags' /proc/cpuinfo(如AVX2指令集对多媒体处理至关重要);grep 'lm' /proc/cpuinfo(若有输出则表示支持)。现代CPU支持动态频率调整(如Intel Turbo Boost、AMD Precision Boost),可通过工具锁定频率模式:
cpufreq-info 或 cpupower frequency-info;cpufreq-set -g performance # 全局设置为最高性能
# 或针对单个核心调整
cpupower -c 0 frequency-set -g performance
performance:CPU始终运行在最高频率(功耗较高,适合高性能计算);powersave:CPU动态降频(功耗较低,适合轻负载场景);ondemand:按需调整频率(平衡性能与功耗,适合通用场景)。/proc/sys/kernel/sched_*调整时间片大小,例如增大sched_min_granularity_ns(最小时间片)可减少进程切换,提升吞吐量:echo 1000000 > /proc/sys/kernel/sched_min_granularity_ns # 单位:纳秒
chrt命令设置实时优先级(0-99,99为最高):chrt -r 99 <command> # 将命令设置为实时调度
taskset或numactl将进程固定到指定核心,减少缓存失效和上下文切换:taskset -c 0,1 <command> # 绑定到CPU 0和1
numactl -C 0-3 <command> # 绑定到NUMA节点的0-3核心
对于多NUMA节点服务器,跨节点访问内存会增加延迟,需通过以下方式优化:
numactl -H(显示节点数量、核心分布、内存本地性);numactl命令将进程与内存分配限制在同一节点:numactl --cpunodebind=0 --membind=0 <command> # 绑定到节点0的核心和内存
/proc/sys/vm/zone_reclaim_mode开启内存回收(默认0,设为1可加速本地内存回收)。内存不足会导致频繁交换(swap),增加CPU负载,需优化以下参数:
echo 10 > /proc/sys/vm/swappiness # 默认60,设为10(0-100,越低越少交换)
echo 65536 > /proc/sys/vm/min_free_kbytes # 单位:KB(默认约6MB,设为64MB)
echo 10 > /proc/sys/vm/dirty_background_ratio # 脏页占比达到10%时后台刷盘
echo 20 > /proc/sys/vm/dirty_ratio # 脏页占比达到20%时强制刷盘
通过工具识别高CPU占用的进程或函数,针对性优化:
top/htop:实时查看CPU使用率(按1查看每个核心的使用情况)、进程占用排名;perf:深度分析CPU热点(如函数调用、指令耗时):perf top # 实时显示热点函数
perf record -g <command> # 记录进程性能数据
perf report # 分析记录的数据
vmstat:查看系统级CPU指标(上下文切换cs、用户态/内核态占比us/sy、负载load average):vmstat 1 # 每秒刷新一次
iostat:分析I/O等待对CPU的影响(%util接近100%表示I/O瓶颈):iostat -x 1
cpufrequtils关闭闲置核心以节省能耗:cpufreq-set -c 3 -g powersave # 关闭核心3(设为节能模式)
apt autoremove、apt clean),减少系统开销。