优化CPU使用率的第一步是掌握CPU的硬件特性,这是制定针对性策略的基础。使用以下命令查看关键信息:
cat /proc/cpuinfo:显示CPU的详细参数(型号、核心数、线程数、缓存大小、支持的指令集如SSE/AVX等);lscpu:以结构化格式输出CPU信息(更易读),包括物理核心数、逻辑核心数、CPU架构、字节序等;grep 'physical id' /proc/cpuinfo | sort | uniq | wc -l(决定多核并行能力);grep 'processor' /proc/cpuinfo | wc -l(含超线程技术的虚拟核心数);grep 'flags' /proc/cpuinfo(如AVX2指令集可加速多媒体、加密等任务);grep 'lm' /proc/cpuinfo(若包含“lm”,则支持64位系统,能利用更大内存提升性能)。优化前需明确是什么进程/线程占用了CPU资源,避免盲目调整。常用工具:
top:实时显示进程CPU使用率(按%CPU排序可快速定位高占用进程),按1可查看每个核心的负载分布;htop(需安装):增强版top,支持颜色标识、鼠标操作,更直观展示进程树和资源占用;ps:批量列出高CPU进程,例如ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu | head -n 10(显示CPU占用前10的进程);perf:深度性能分析工具,可采样进程的CPU时间消耗(如perf top实时查看热点函数,perf record -g -p <PID>记录进程调用栈,perf report生成分析报告)。针对高CPU进程,可通过以下方式限制其对CPU的占用:
nice:启动进程时设置优先级(范围-20~19,数值越小优先级越高),例如nice -n -10 ./app(提高优先级);renice:修改已运行进程的优先级,例如renice -n 10 -p <PID>(降低优先级,减少CPU占用);cpulimit工具限制进程的CPU占用比例(如cpulimit -p <PID> -l 50,限制该进程最多使用50%的CPU);taskset或numactl将进程绑定到指定的CPU核心(减少进程在不同核心间迁移的开销,提升缓存命中率),例如:
taskset -c 0-3 ./app(将进程绑定到核心0~3);numactl -C 0-3 -m 0 ./app(同时绑定核心和NUMA节点,适用于多NUMA系统)。从系统层面优化CPU调度,提升整体资源利用率:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor),若为ondemand(按需调整频率),可修改为performance(始终运行在最高频率),提升性能(如echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor);cpufrequtils或numactl关闭闲置核心(节省能耗,适用于服务器场景),例如echo 0 | tee /sys/devices/system/cpu/cpu*/online(关闭指定核心,需谨慎操作);sysctl -w kernel.sched_migration_cost_ns=5000000(增大进程迁移的时间阈值);sysctl -w vm.dirty_ratio=10(脏页占内存10%时触发写入)、vm.dirty_background_ratio=5(后台写入阈值),减少I/O对CPU的占用。针对多核CPU,优化任务的并行执行效率:
numactl --cpunodebind=0 --membind=0 ./app(绑定到节点0);mpstat监控各核心的负载(mpstat -P ALL 1),确保所有核心得到合理利用(若某核心长期高负载,需调整任务分配或增加核心)。从根源上降低CPU占用,提升系统稳定性:
innodb_buffer_pool_size设置为物理内存的70%~80%,减少磁盘I/O);