Tuned 是 Linux 系统(特别是 RHEL、CentOS、Fedora 等红帽系发行版,但也支持 Debian/Ubuntu)中的一个动态自适应系统调优守护进程。
介绍
Tuned 的核心作用是:通过应用预定义的配置文件(Profiles),自动调整大量的内核参数、电源管理设置和 CPU 调频策略,以适应不同的工作负载场景(如高吞吐量、低延迟、虚拟机宿主等)。
使用 Tuned 可以避免管理员手动去修改 /proc、/sys 或 sysctl.conf 中的数百个参数。
在计算机和机械领域,“Tune” 通常指 “Performance Tuning”(性能调优)
核心概念
- 守护进程 (
tuned): 监控系统状态并在需要时应用调优设置。
- 管理工具 (
tuned-adm): 命令行工具,用于用户与守护进程交互(切换配置、查询状态)。
- 配置文件 (Profiles): 预设的调优策略集合。Tuned 自带了很多针对不同场景的通用配置。
安装与启动
大多数 RHEL/CentOS 7/8/9 系统默认已安装。如果没有:
CentOS/RHEL/Fedora:
yum install tuned
systemctl enable --now tuned
Ubuntu/Debian:
apt install tuned
systemctl enable --now tuned
常用配置文件 (Profiles) 介绍
Tuned 自带了很多配置,不同的配置会影响 CPU 调频、磁盘 I/O 调度算法、网络缓冲区等。常见的有:
| 配置文件名 |
适用场景 |
特点 |
| balanced |
通用桌面/服务器 |
默认配置。在性能和省电之间折衷。 |
| throughput-performance |
服务器 |
此时性能优先。禁用省电模式,将 CPU 设置为 performance 模式,优化磁盘吞吐量。 |
| latency-performance |
数据库/实时应用 |
牺牲部分吞吐量以换取极低的延迟。禁用 CPU 深度睡眠,锁定 CPU 频率。 |
| virtual-guest |
虚拟机 |
针对作为虚拟机运行的系统进行优化(减少虚拟时钟开销等)。 |
| virtual-host |
宿主机 (KVM) |
针对运行虚拟机的物理机进行优化。 |
| powersave |
笔记本/闲置设备 |
极度省电,性能较低。 |
| network-latency |
网络应用 |
专注于降低网络延迟。 |
tuned-adm 常用命令示例
示例 1: 查看当前激活的配置
输出示例: Current active profile: virtual-guest
示例 2: 列出所有可用的配置
此命令会列出系统自带的和用户自定义的所有配置。
示例 3: 接受系统推荐
Tuned 可以检测你的环境(是物理机还是虚拟机),并推荐一个配置。
输出示例: virtual-guest (如果你是在虚拟机里运行)
示例 4: 切换/应用新的配置
如果你正在运行一个高负载的数据库或文件服务器,建议切换到高性能模式:
tuned-adm profile throughput-performance
此操作立即生效,且重启后依然有效。
示例 5: 验证配置完整性
检查当前的系统设置是否与 Tuned 配置文件中的定义一致(查看是否被手动修改过):
示例 6: 关闭 Tuned
如果你想手动完全接管系统参数,可以关闭它:
进阶:自定义 Tuned 配置 (实战示例)
有时候默认的配置不能满足需求,你可以基于现有的配置创建一个自定义版本。
场景:你需要一个基于 throughput-performance 的配置,但你需要强制关闭内存大页(Transparent Huge Pages),并修改一个特定的内核参数。
步骤:
-
创建配置目录
Tuned 的自定义配置通常放在 /etc/tuned/ 下。
mkdir /etc/tuned/my-db-profile
-
创建配置文件 tuned.conf
使用你喜欢的编辑器(如 vim)创建文件:
vim /etc/tuned/my-db-profile/tuned.conf
-
编写配置内容
Tuned 配置文件采用 INI 格式。
[main]
summary=My custom database profile based on throughput-performance
# 继承 throughput-performance 的所有设置
include=throughput-performance
[vm]
# 禁用透明大页 (针对某些数据库如 Redis/Oracle 往往需要禁用)
transparent_hugepages=never
[sysctl]
# 自定义内核参数,例如调整 swappiness
vm.swappiness=10
# 调整最大打开文件句柄数 (fs.file-max)
fs.file-max=65535
-
激活自定义配置
# 先让 tuned 重新加载配置列表
tuned-adm list
# 激活你的新配置
tuned-adm profile my-db-profile
-
验证
你可以检查参数是否生效:
cat /sys/kernel/mm/transparent_hugepage/enabled
# 输出应该包含 [never]
sysctl vm.swappiness
# 输出应该是 10
总结
- 简单场景:使用
tuned-adm recommend 或直接设置为 throughput-performance 即可满足绝大多数服务器需求。
- 复杂场景:通过
/etc/tuned/ 创建继承式配置,可以在享受官方优化基础的同时,实现特定参数的微调。
- 优势:相比把
sysctl 命令写在 rc.local 里,使用 Tuned 管理更加规范、统一且易于回滚。