第75章:CPU 优化

第七十五章:CPU 优化

75.1 CPU 性能分析

查看 CPU 信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 查看 CPU 详细信息
cat /proc/cpuinfo

# 关键信息
# processor: CPU 核心编号
# model name: CPU 型号
# cpu MHz: 当前频率
# cache size: 缓存大小
# flags: 支持的特性

# 简洁输出
lscpu

# 预期输出:
# Architecture:        x86_64
# CPU(s):              8
# Thread(s) per core:   2
# Core(s) per socket:  4
# Model name:          Intel(R) Core(TM) i7-10700 @ 2.90GHz
# CPU MHz:             2900.000
# Cache size:         16384 KB

top/htop 分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# top 基本使用
top

# 快捷键
# P: 按 CPU 排序
# M: 按内存排序
# N: 按 PID 排序
# 1: 显示每个 CPU 核心
# k: 杀死进程
# r: 调整优先级

# htop(更友好)
htop

mpstat 多核统计

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 安装
sudo apt install sysstat

# 查看所有 CPU
mpstat -P ALL

# 每秒更新
mpstat 1

# 查看 CPU 详细统计
mpstat -I

# 预期输出:
# 02:45:00 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
# 02:45:01 PM    0   10.00    0.00    5.00    0.00    0.00    0.00    0.00    0.00    0.00   85.00

perf 性能分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 安装
sudo apt install linux-tools-common linux-tools-generic

# perf stat 基本统计
perf stat -a sleep 5

# perf top 实时热点分析
sudo perf top

# perf record 记录数据
sudo perf record -a -g -- sleep 30

# perf report 查看报告
sudo perf report

CPU 使用率分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 查看 CPU 使用情况
mpstat 1

# 分析
# %usr: 用户空间使用
# %sys: 内核空间使用
# %iowait: IO 等待
# %idle: 空闲

# 如果 %iowait 高,说明 IO 是瓶颈
# 如果 %sys 高,说明系统调用多
# 如果 %usr 高,说明应用计算多

75.2 CPU 调优参数

/proc/cpuinfo

1
2
3
4
5
6
7
8
# 查看 CPU 频率信息
cat /proc/cpuinfo | grep MHz

# 查看 CPU governor(调频策略)
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# 查看可用 governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

CPU 频率调节

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看当前频率
cpufreq-info

# 设置 performance 模式(性能优先)
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo performance > $cpu
done

# 设置 powersave 模式(节能)
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo powersave > $cpu
done

# 设置 ondemand 模式(动态调节)
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo ondemand > $cpu
done

sysctl 调度参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看调度参数
sysctl -a | grep kernel.sched

# scheduler latency(调度延迟)
sysctl -w kernel.sched_latency_ns=10000000

# minimum granularity(最小粒度)
sysctl -w kernel.sched_min_granularity_ns=1000000

# wakeup granularity
sysctl -w kernel.sched_wakeup_granularity_ns=1000000

# CPU 核心隔离(需要内核参数 isolcpus)
# 在 grub 添加:isolcpus=1,2,3

永久生效配置

1
2
3
4
5
6
7
# /etc/sysctl.conf
sudo nano /etc/sysctl.conf

# 添加:
kernel.sched_latency_ns = 10000000
kernel.sched_min_granularity_ns = 1000000
kernel.sched_wakeup_granularity_ns = 1000000

75.3 进程优化

nice/renice 优先级

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# nice 值范围:-20 到 19
# 越低优先级越高

# 启动时设置优先级
nice -n -10 ./my_program

# 查看进程 nice 值
ps -eo pid,ni,comm

# 修改运行中进程优先级
renice -n 10 -p PID

# 批量修改
renice -n 10 -p $(pgrep -f process_name)

# 最高优先级
sudo renice -n -20 -p PID

taskset CPU 亲和性

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 查看进程 CPU 亲和性
taskset -cp PID

# 设置 CPU 亲和性
taskset -c 0,1 ./my_program     # 只使用 CPU 0 和 1
taskset -c 0-3 ./my_program    # 使用 CPU 0-3
taskset -c 4 ./my_program      # 只使用 CPU 4

# 修改运行中进程
taskset -cp 0-3 PID

# 查看 CPU 核心
nproc

CPU 隔离示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 1. 在 /etc/default/grub 中添加
GRUB_CMDLINE_LINUX="isolcpus=1,2,3"

# 2. 更新 grub
sudo update-grub

# 3. 重启后验证
cat /proc/cmdline

# 4. 将进程绑定到隔离的核心
taskset -c 0 ./my_program

高性能场景配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/bash
# enable-performance-mode.sh

# 1. 设置 performance governor
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo performance > $cpu
done

# 2. 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 3. 调整调度参数
sysctl -w kernel.sched_latency_ns=10000000
sysctl -w kernel.sched_min_granularity_ns=1000000

# 4. 设置 CPU 亲和性(根据需要)
taskset -c 0-3 ./my_high_performance_app

本章小结

本章我们学习了 CPU 优化的核心知识:

工具用途
/proc/cpuinfoCPU 硬件信息
lscpuCPU 概要信息
top/htop实时进程监控
mpstat多核统计
perf性能分析
nice/renice进程优先级
tasksetCPU 亲和性

CPU 优化流程:

graph LR
    A[监控分析] --> B{瓶颈在哪?}
    B -->|%iowait高| C[优化IO]
    B -->|%usr高| D[优化计算]
    B -->|%sys高| E[优化系统调用]
    C --> F[应用优化]
    D --> F
    E --> F

💡 温馨提示: CPU 优化的关键是找出真正的瓶颈。盲目调参可能适得其反,先用工具分析,再针对性优化!


第七十五章:CPU 优化 — 完结! 🎉

下一章我们将学习"内存优化",掌握内存分析、Swap 调优等技能。敬请期待! 🚀

最后修改 March 24, 2026: 新增JavaScript教程 (37305c4)