Linux 系统性能调优技巧

简介: 【8月更文挑战第22天】

Linux 系统广泛应用于服务器和开发环境中,其性能直接影响应用程序的稳定性和响应速度。本文将详细介绍如何通过各种技巧和工具对 Linux 系统进行性能调优,从而提升整体系统的效率和稳定性。

性能调优是一项复杂的任务,涉及到操作系统的各个方面。调优的目标是通过合理配置系统资源、优化应用程序运行环境以及调整系统参数,以最大化系统的性能表现。

调优通常从监控系统性能开始,通过观察各项关键指标(如 CPU 使用率、内存占用、磁盘 I/O、网络流量等),发现性能瓶颈,并有针对性地进行优化。

系统监控

系统监控是性能调优的基础。通过监控工具,可以实时了解系统的运行状态,找出资源消耗高的进程,判断系统瓶颈的所在。

tophtop

top 是一个非常强大的实时系统监控工具,可以显示系统的整体负载、每个进程的 CPU 和内存使用情况等。htoptop 的增强版,提供了更友好的界面和更灵活的交互方式。

  • CPU 和内存使用情况:观察哪个进程占用了大量 CPU 或内存,确定系统负载的主要来源。
  • 进程管理:可以直接通过 tophtop 杀死不必要的进程。

vmstat

vmstat 提供了关于系统虚拟内存、进程、CPU 活动、磁盘 I/O 等的详细统计信息。它可以帮助识别 CPU、内存和 I/O 的瓶颈。

vmstat 5 10

上面的命令将每 5 秒输出一次系统状态,共 10 次。通过分析 procscpu 等字段,可以了解系统的负载分布情况。

iostat

iostat 专注于系统 I/O 性能监控,能够显示各个设备的 I/O 统计数据,如每秒读写次数、平均等待时间等。

iostat -xz 5

这个命令会每 5 秒输出一次详细的设备 I/O 使用情况,帮助确定 I/O 密集型的瓶颈所在。

sar

sarsysstat 包的一部分,用于收集和报告系统活动信息,包括 CPU 使用率、内存使用情况、设备负载、网络吞吐量等。

sar -u 1 10

此命令将每秒报告一次 CPU 使用情况,共 10 次。sar 支持多种选项,可以监控几乎所有系统资源。

CPU 调优

CPU 作为系统的核心资源,其调优对整体性能有着重要影响。通过合理的调度和资源分配,可以提升系统的并发处理能力。

调整进程优先级

nicerenice 命令可以调整进程的优先级,确保关键任务获得更多的 CPU 资源。

  • nice:启动进程时设置优先级。默认情况下,进程的优先级为 0,值越小优先级越高,值越大优先级越低。
nice -n 10 command
  • renice:调整已经在运行的进程的优先级。
renice -n -5 -p PID

其中 PID 是进程的 ID,将其优先级提升至 -5。

绑定进程到指定 CPU

在多核处理器上,可以使用 taskset 命令将进程绑定到特定的 CPU 核心,从而减少 CPU 切换带来的开销。

taskset -c 0,1 command

这个命令将 command 绑定到第 0 和第 1 个 CPU 核心上运行。

使用 cpuset 控制 CPU 和内存

cpuset 是 Linux 内核中的一个功能,它允许用户将 CPU 和内存分配给特定的进程或任务。通过 cpuset,可以更加精细地控制 CPU 资源的分配。

mkdir /dev/cpuset
mount -t cpuset cpuset /dev/cpuset
mkdir /dev/cpuset/mycpuset
echo 0 > /dev/cpuset/mycpuset/cpus
echo $$ > /dev/cpuset/mycpuset/tasks

这段命令将当前 shell 进程绑定到第 0 个 CPU 上。

内存调优

内存调优主要关注内存的使用情况和管理策略。通过合理的内存分配和回收机制,可以避免内存泄漏和过度交换,提升系统性能。

调整交换分区

交换分区(swap)用于在物理内存不足时,将不常用的数据暂时存储到硬盘中。虽然交换分区可以避免内存耗尽导致的系统崩溃,但频繁的交换会显著降低系统性能。

  • 查看当前交换使用情况
swapon -s

  • 调整交换分区的优先级
sysctl vm.swappiness=10

vm.swappiness 的默认值为 60,值越大表示系统倾向于更频繁地使用交换分区。将其调低可以减少交换的发生频率。

使用 freesmem 监控内存

free 命令可以显示系统的内存使用情况,包括物理内存和交换分区。

free -m

smem 是一个更高级的内存使用分析工具,它可以显示每个进程的实际内存占用情况,并以更直观的方式呈现结果。

smem -r -k

磁盘 I/O 调优

磁盘 I/O 是另一个影响系统性能的重要因素,特别是在数据库服务器或其他 I/O 密集型应用中。通过优化 I/O 调度策略和文件系统设置,可以有效提升磁盘的读写性能。

调整 I/O 调度算法

Linux 内核支持多种 I/O 调度算法,如 cfq(完全公平队列)、deadlinenoop。不同的调度算法适用于不同的使用场景。

  • 查看当前 I/O 调度算法
cat /sys/block/sda/queue/scheduler
  • 设置 I/O 调度算法
echo noop > /sys/block/sda/queue/scheduler

noop 适用于 SSD 等固态硬盘,deadline 适用于延迟敏感的应用,cfq 适合多任务场景。

使用 iotop 监控 I/O

iotop 是一个实时 I/O 监控工具,类似于 top,但专注于磁盘 I/O 活动。通过 iotop,可以识别出占用大量 I/O 资源的进程。

iotop -o

-o 选项仅显示正在进行 I/O 操作的进程。

调整文件系统参数

  • 启用 noatimenoatime 选项可以避免每次文件访问时更新访问时间,从而减少磁盘写操作。
mount -o remount,noatime /
  • 调整文件系统的预读(readahead):增加预读大小可以提升顺序读写性能。
blockdev --setra 2048 /dev/sda

网络性能调优

网络性能对于服务器应用尤其重要。通过优化网络栈和调整相关参数,可以减少延迟并提升吞吐量。

调整 TCP 参数

  • 增加 TCP 缓存大小
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216

这些参数控制了 TCP 缓存的最大值,增加它们可以提升大流量传输的性能。

  • 启用 TCP 快速重传
sysctl -w net.ipv4.tcp_sack=1

启用 tcp_sack(选择性确认)可以加快数据包的重传速度,减少因丢包造成的延迟。

目录
相关文章
|
4天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
2天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
3天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
16 6
|
8天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
3天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
4天前
|
Linux Shell
Linux系统编程:掌握popen函数的使用
记得在使用完 `popen`打开的流后,总是使用 `pclose`来正确关闭它,并回收资源。这种做法符合良好的编程习惯,有助于保持程序的健壮性和稳定性。
20 3
|
6天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
7天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
1天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
5天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。