五.调优系统性能
1.设置tuned配置文件
1.1系统调优
系统调优的本质是管理员根据不同工作负载的特征(如业务是数据库服务、Web 服务还是高性能计算),调整系统的各类配置(如内核参数、资源分配策略等),从而让系统在特定工作场景下达到最优性能。
简单来说,不同业务对系统的 CPU、内存、I/O、网络等资源的需求差异很大,调优就是 "按需定制" 系统的运行规则。
1.2tuned 守护进程:系统调优的 "执行者"
tuned 是 Linux 系统中专门用于性能调优的守护进程,它的核心能力是通过 "调优配置文件" 来适配不同工作负载。
每个配置文件都预先定义了一套针对特定工作负载的调优规则(比如 "数据库服务" 需要高 I/O 吞吐量,"实时计算服务" 需要低延迟)。tuned通过静态调优和动态调优两种方式,将这些规则落地到系统中。
默认情况下,RHEL9的最小安装包中包含并启用了tuned软件包;
若要手动安装并启用该软件包:
dnf install tuned
1.2.1 静态调优:"一次性配置,持久生效"
触发时机:
当tuned服务启动时,或管理员手动选择了新的调优配置文件时,静态调优的设置会被应用。
适用场景:
主要用于设置内核参数(如内存分配策略、CPU 调度算法的基础参数等)。这些参数一旦设置,在系统运行过程中不会 "自动变化",除非再次触发配置更新。
如 :
若选择 "latency-performance(低延迟性能)" 配置文件,tuned 会在启动时将内核中与 "降低 CPU 调度延迟" 相关的参数一次性设置到位,让系统更适合对延迟敏感的业务(如实时交易)。
1.2.2 动态调优:"实时监控,自适应调整"
工作机制:
tuned会持续监视系统的运行时活动(如 CPU 利用率、内存占用率、I/O 负载等),并根据这些 "实时行为变化" 自动调整系统设置。
适用场景:
用于应对运行过程中动态变化的负载。比如系统 I/O 负载突然升高时,tuned 会动态调整 I/O 调度器的参数,优先保证 I/O 吞吐量;当 CPU 空闲时,又会调整 CPU 频率策略以节省能耗。
作用 :
让系统在 "变化的工作负载" 中持续保持最优性能,无需人工频繁干预。
1.3 选择调优配置文件
tuned 的调优配置集存储在两个目录:
(1)/usr/lib/tuned:
默认系统配置目录,包含官方预置的所有调优配置集。(禁止直接修改)
如:

(2)/etc/tuned:
自定义/当前有效配置目录,用于存放用户自定义配置集或当前生效的配置集。(在此更改调优规则)
如:

1.4常见各类调优配置文件:
|-------------------------|------------------------------------------------------------------------|
| 调优配置文件 | 用途说明 |
| balanced | 在节能和性能之间做平衡,适合对能耗和性能无极致偏向的通用场景。 |
| powersave | 以 "最大程度节能" 为目标调优,适合低负载、优先降低能耗的场景(如 idle 服务器)。 |
| throughput-performance | 追求最大吞吐量,适合数据密集型、高并发处理的业务(如大数据分析、批量计算)。 |
| accelerator-performance | 调优逻辑与 throughput-performance 一致,且将延迟缩短到 100 微秒以下,实现 "高吞吐量 + 低延迟" 双重优化。 |
| latency-performance | 牺牲部分能耗换取极低延迟,适合实时交易、高频通信等对响应时间极度敏感的场景。 |
| network-latency | 由 latency-performance 衍生,额外启用网络调优参数,专注降低网络延迟(如金融交易网络)。 |
| network-throughput | 由 throughput-performance 衍生,应用额外网络调优参数,追求最大网络吞吐量(如大文件传输、流媒体)。 |
| desktop | 由 balanced 衍生,加快交互式应用响应速度,适合 Linux 桌面办公环境。 |
| hpc-compute | 由 latency-performance 衍生,适合 ** 高性能计算(HPC)** 场景(如科学模拟、复杂数值计算)。 |
| virtual-guest | 系统作为虚拟机客户机运行时,调优以获得最高性能。 |
| virtual-host | 系统作为 ** 虚拟机主机(宿主机)** 运行时,调优以获得最高性能。 |
| intel-sst | 优化采用 Intel Speed Select Technology 的系统,可作为其他配置集的 "覆盖层"(叠加补充优化)。 |
| optimize-serial-console | 提高串行控制台响应能力,可作为其他配置集的覆盖层(如嵌入式设备、老旧硬件管理场景)。 |
1.5从命令行管理配置文件
tuned-adm命令更改tuned守护进程的设置:
1.5.1列出所有可用的配置文件:
tuned-adm list
列出系统中所有可选用的调优配置文件,并附带每个配置的用途说明;

1.5.2查看当前激活的配置文件
tuned-adm active
显示当前系统正在使用的调优配置文件;
如:

输出Current active profile: virtual-guest:
说明当前系统正在使用 virtual-guest 调优配置文件,该配置专为 "虚拟机客户机" 场景设计,用于优化虚拟机内部的系统性能。
1.5.3切换配置文件
tuned-amd profile 配置文件名字;
切换系统的调优配置文件,使新配置立即生效;
tuned-amd profile_info 配置文件名字;
查看配置集的详细信息(调优逻辑等)
如:

配置由: virtual-guest 变为 throughput-performance
执行后,系统会应用 throughput-performance 的调优策略,适合大数据处理、批量计算等高吞吐量业务。
1.5.4关闭tuned
tuned-adm off
禁用所有 tuned 优化,恢复到系统默认状态;
直接使用tuned-adm off即可;
2.影响进程调度
2.1 Linux进程调度
背景:
现代计算机系统中,需要运行的进程 / 线程数量通常远超 CPU 核心数。例如,一台 4 核 CPU 的设备,可能同时有几十个进程(如浏览器、办公软件、后台服务等)等待执行,这种 "进程数量> CPU 核心数" 的场景,是进程调度技术的触发前提。
核心技术:
(1) 时间分片(Time-Slicing):
操作系统将 CPU 的运行时间切割成极短的 "时间片"(通常为毫秒级),每个进程轮流占用一个时间片执行。
(2) 多任务(Multitasking) :
通过时间分片技术,Linux 等操作系统具备了 "同时管理多个进程执行" 的能力,从而突破 "CPU 核心数" 的限制,运行远超处理单元数量的进程。
简单来说,Linux 是通过 "把 CPU 时间'切碎'后轮流分配给不同进程" 的方式,实现了在 CPU 资源不足时仍能运行大量进程的效果。
2.2进程优先级
2.2.1调度策略:
(1)操作系统可针对不同进程设置差异化调度策略,以适配业务对 CPU 资源的不同需求。
(2)系统中绝大多数进程采用 SCHED_OTHER(又称SCHED_NORMAL) 调度策略,这是 Linux 的默认通用调度策略。
2.2.2 nice 值
nice值是SCHED_NORMAL策略下相对优先级的具体表现,核心规则如下:
(1)级别数量:共有 40 种不同级别的nice值可设置。
(2)范围与优先级逻辑:nice值范围为 -20(最高优先级)~ 19(最低优先级)。
nice值越高(如 19),进程优先级越低,越 "愿意" 将 CPU 使用权让给其他进程;
nice值越低(如 - 20),进程优先级越高,越 "倾向于" 占用 CPU 资源。
(3)默认继承:进程默认继承其父进程的nice值,通常为0(中性优先级)。
2.2.3资源争用的特殊表现
若系统中活动进程数少于可用 CPU 核心数(无资源竞争),即使nice值高的进程,也会尽可能多地使用 CPU 资源 ------ 因为此时无需通过 "让 CPU" 来保障其他进程运行。
2.2.4进程优先级体系结构:

SCHED_NORMAL(SCHED_NORMAL) :
适用对象:大多数普通用户进程
特点:使用完全公平调度器(CFS)
优先级控制:通过 nice 值调整
其他实时调度策略 :
SCHED_FIFO:先进先出实时调度
SCHED_RR:轮转实时调度
SCHED_BATCH:批处理任务
SCHED_IDLE:极低优先级任务
2.3查看nice值
2.3.1top命令查看nice
使用top命令查看nice值(NI)和priority值(PR);
priority 值(PR)的定义与映射关系;
PR 列表示进程的调度优先级,其数值与 nice 值存在映射关系:
(1)当 nice 值为 -20 时,映射到 PR 值 0(此时进程优先级最高);
(2)随着 nice 值增大 (向 19 靠近),PR 值也会相应升高(优先级降低)。
具体查看nice步骤:
(1)运行top命令
运行top命令进入实时监控界面

(2)进入"字段选择"模式
通过"f"键,进入"字段选择"模式:

界面会列出所有可显示的进程字段,每个字段前有一个 "*" 表示当前已启用。
(3)启用"NI(Nice 值)"字段
在字段列表中找到 NI - Nice value 这一项,按下 空格键 为其添加 "*"(表示启用该字段),然后按下 回车键 返回top主界面。

(4)查看nice值

2.3.2ps命令查看nice值
2.3.2.1查看所有进程的nice值并排序
ps axo pid,comm,nice,cls --sort=-nice
解释:
****a:****显示所有用户的进程;
****x:****显示不关联终端的进程(如后台服务);
****o pid,comm,nice,cls:****自定义输出字段,分别为进程 ID(pid)、命令名称(comm)、nice 值(nice)、调度类型(cls);
****--sort=-nice:****按 nice 值降序排列(- 表示降序,省略则为升序)(可选)
如:

2.3.2.2查看特定进程的nice值
(1)通过进程名字(-C)筛选;
如:
ps -o pid,comm,nice -C nginx

查看mld进程的nice值
(2)通过PID(-p)筛选:
如:
ps -o pid,comm,nice -p 63

查看PID为1234的进程的nice值
2.4从命令行设置nice值和权限
2.4.1权限规则
普通用户:仅能提高 自己进程的 nice 值(即降低进程优先级 ),无法降低自己进程的 nice 值。
root 用户:才可以 降低 进程的 nice 值(即提高进程优先级,因为nice值越低,优先级越高)。
2.4.2nice的继承规则
进程在创建过程中会继承父级进程的 nice 值;
从命令行启动进程时,进程会继承 启动 它的 shell 进程 的nice 值,而 shell 进程的 nice 值通常为 0。
2.4.3方法
2.4.3.1启动进程时设置
shell 进程的 nice 值通常为 0 ;
格式:
nice -n nice的值 命令
如:
nice -n 15 进程
(1)启动一个nice为15的sleep进程

(2)查看这个进程的nice值

该sleep进程的nice值为15(设置成功)
2.4.3.2修改运行中的进程
使用renice命令更改现有进程的nice级别;
格式:
renice nice的值 -p PID
或
renice -n nice的值 PID
如:
renice 6 -p 32

将PID为32的进程的nice值由5变为6(降低优先级);
2.5使用top命令更改nice级别
步骤:
(1)启用top命令
进入实时监控界面;

(2)定位目标进程
记录目标进程的PID;
如:PID为15的进程

(3)进入renice模式
在交互界面通过"r"键,进入进程优先级调整模式;

界面提示PID to recice:
(4)输入目标PID
输入后回车,进行修改nice步骤

(5)修改nice
输入新的nice值,回车确定

如:nice为1

修改完成
注:
以下几类进程通常不允许修改优先级
|--------------|---------------------------------|------------------------------------------------------|
| 进程类型 | 示例进程 | 原因说明 |
| 内核线程进程 | kthreadd、migration/0、watchdog/0 | 属于内核核心组件,负责 CPU 调度、系统监控等关键功能,修改优先级会破坏系统稳定性。 |
| 实时调度策略进程 | 部分工业控制、嵌入式系统的实时任务 | 采用SCHED_FIFO/SCHED_RR调度策略,优先级由实时规则管理,nice值无意义且不允许修改。 |
| 系统关键服务的核心进程 | systemd(部分关键子进程)、init | 是系统初始化、服务管理的核心,修改其优先级可能导致服务异常、系统启动失败。 |