一般来说,在资源寸土寸金的服务器上,如果不合理调度资源,那么造成的浪费是很大的。然而有时候,即使资源调度合理,系统的性能还是不行。这是因为,我们并没有进行调优的步骤,导致系统在看不见的地方耗费本来应该分配给常用服务的资源,进而拉低整体性能。本节就来详细说说,如何完成这一步骤。

动态调优

初识 tuned

Linux 自带一个调优进程 tuned. 它的作用是根据当前用户的使用情况动态分配资源,并暂时禁用不必要的服务/进程。

然而,在默认情况下,动态调优是被禁用的。我们可以直接修改它的配置文件以启用它。具体来说,是 /etc/tuned/tuned-main.conf 文件的 dynamic_tuning 一行(0 表示被禁用):

tuned 预设配置集

其实,tuned 本身作为软件包,是有一系列预设的配置集的:

调优配置集名称

解释

balanced

总体平衡,兼顾节能和性能

aws

专为 AWS EC2 实例优化的配置集

powersave

最大程度降低系统功耗,实现节能

throught-performance

使得系统获得最大的吞吐量

accelerator-performance

调优方式与 throughput-performance 相同,延迟将缩短到 100 us 以下

latency-performance

以能耗为代价,尽可能降低任务处理的延迟

network-throughput

衍生自 throughput-performance,应用其他网络调优参数以获取最大网络吞吐量

network-latency

衍生自 latency-performance,会启用额外的网络调优参数以提供尽可能低的网络延迟

desktop

衍生自 balanced,用于加快桌面环境应用的响应速度

hpc-compute

衍生自 latency-performance,专用于 HPC(High Performance Computing,高性能计算)

virtual-guest

对 KVM 等类型的虚拟机进行调优,以获得最高性能

virtual-host

对 KVM 等类型的虚拟机宿主机进行调优,以获得最高性能

intel-sst

针对 ISST(Intel 速度选择技术)配置的系统进行优化的配置集(覆盖层)

optimize-serial-console

提高串行控制台的相应能力(覆盖层)

这样我们可以直接使用这些预设的配置集,无需手动修改参数。

在实际使用时,我们不需要记住这么多的名字(但是要知道它们的含义),因为它们都保存在 /usr/lib/tuned/profiles/etc/tuned/profiles 目录下:

(请注意,在 RHEL 9 或更旧的系统内,路径里可能没有 profiles

由于篇幅限制,这里就不展示具体的配置文件了。当然,如果经验丰富,你也可以创建自己的调优配置集,但最好放在 /etc/tuned/profiles 目录下。系统将遵循覆盖原则

从命令行管理 tuned 配置集

Linux 系统内提供了一个叫做 tuned-adm 的命令方便我们更改 tuned 进程(严格的说,其实是守护进程,即 daemon)的设置。

如果要识别当前适配的调优配置集:

tuned-adm active

如果要列出所有可用的调优配置集:

tuned-adm list

要获取某个配置集(以 virtual-guest 为例)的有关信息:

tuned-adm profile virtual-guest

如果不指定具体的配置集,则会显示当前配置集的信息。

当然,如果不知道应该选什么配置集好,可以向 tuned 获取建议:

tuned-adm recommended

最后,如果不愿意使用 tuned,可以将其关闭:

tuned-adm off

通过 Web 控制台管理

这种方法比较直接,但请确保你以管理访问模式设置,否则将无法更改。

为了访问 Web 控制台,你需要访问 http://<your_server_ip>:9090.

进程调优

前面一篇文章中我们讲过,我们可以使用 nicerenice 调整进程的优先级。这边就不再赘述了。

但是,必须要指出的是,普通用户可以降低某个进程的优先级,而只有 root 用户才能提高优先级

此外,nice 后接命令时,如果不手动指定优先级,那么创建的进程默认具有 10 的优先级

C/C++ 新人开发者,主攻 UE5,业余 Linux 运维