解锁Linux性能密码:25个实用调优技巧

目录

一、引言

二、系统资源监控工具

2.1 top 和 htop

2.2 vmstat

2.3 iostat

三、内核参数优化

3.1 调整 swappiness 参数

3.2 优化 I/O 调度器

3.3 调整 dirty_ratio 和 dirty_background_ratio

3.4 启用大页内存(Huge Pages)

3.5 调整内核参数 net.core.somaxconn

四、网络性能优化

4.1 优化网络缓冲区

4.2 调整 tcp_tw_recycle 和 tcp_tw_reuse

4.3 调整 TCP 窗口大小

4.4 调整 tcp_fin_timeout 参数

五、文件系统与磁盘优化

5.1 使用 noatime 选项挂载文件系统

5.2 使用 SSD 优化读写速度

六、服务与进程优化

6.1 禁用不必要的服务

6.2 优化进程调度策略

七、其他优化技巧

7.1 使用 tuned 自动优化系统配置

7.2 启用异步 I/O(AIO)

7.3 使用 nscd 加速 DNS 解析

7.4 禁用不必要的内核模块

7.5 使用 perf 工具进行性能分析

7.6 启用 NUMA(Non - Uniform Memory Access)优化

八、总结


一、引言

        在当今数字化时代,Linux 系统凭借其开源、稳定、安全等特性,在服务器领域占据了举足轻重的地位。从大型企业的数据中心,到互联网公司的云计算平台,Linux 系统无处不在,支撑着海量业务的稳定运行。据统计,全球超过 70% 的网站服务器都运行在 Linux 操作系统上,许多知名的互联网企业,如谷歌、亚马逊、阿里巴巴等,都广泛采用 Linux 系统来构建其核心业务架构。

        然而,随着业务的不断增长和用户需求的日益复杂,服务器面临的负载压力也与日俱增。在这种情况下,仅仅依靠硬件的升级来提升系统性能往往成本高昂且效果有限。因此,对 Linux 系统进行性能调优就显得尤为重要。通过合理的性能调优,可以充分挖掘 Linux 系统的潜力,提高系统的资源利用率,增强系统的稳定性和响应速度,从而以较低的成本满足业务的高性能需求。无论是应对电商促销活动期间的高并发访问,还是处理大数据分析任务中的海量数据,性能调优都能确保 Linux 系统在各种复杂场景下高效运行,为企业的业务发展提供坚实的技术保障。

二、系统资源监控工具

        在进行 Linux 系统性能调优之前,我们需要借助一些工具来全面了解系统的运行状态,精准定位性能瓶颈。下面将为大家介绍几款常用且功能强大的系统资源监控工具。

2.1 top 和 htop

        top 是 Linux 系统中一款经典的实时系统监控工具,几乎在所有的 Linux 发行版中都能找到。它就像一个实时的系统状态仪表盘,通过在终端输入 “top” 命令启动后,能动态展示系统的总体状态和各个进程的详细信息 。在系统总体状态方面,top 顶部区域会显示系统运行时间、当前登录用户数以及系统负载情况。其中,系统负载是一个关键指标,它反映了系统在过去 1 分钟、5 分钟和 15 分钟内的平均工作负载,数值越高,表示系统越繁忙。同时,这里还会展示 CPU 使用率,包括用户态(us)、内核态(sy)和空闲(id)等不同状态的占比,让我们直观了解 CPU 的工作分配情况。内存使用情况也一目了然,总内存、已用内存、空闲内存等信息清晰呈现,帮助我们判断内存是否紧张。

        在进程列表中,top 会列出每个进程的详细信息,如 PID(进程 ID),它是每个进程的唯一标识,方便我们对特定进程进行操作;USER 表示进程的所有者;% CPU 显示该进程占用的 CPU 百分比,通过这个指标,我们能快速找出占用 CPU 资源较多的进程;% MEM 则展示进程的内存使用率;TIME + 记录进程启动后的累计 CPU 时间;COMMAND 为进程的命令名称,有助于我们了解进程的具体功能。

        当我们需要对进程进行排序时,默认按 CPU 使用率排序,若想按内存使用率排序,只需按下 “M” 键;按 “P” 键则可按 CPU 使用率重新排序,方便我们快速定位资源占用大户。若发现某个进程占用资源过高且无必要运行,还可以按 “k” 键,输入该进程的 PID 来结束它 。

        htop 是 top 的增强版,在功能和用户体验上有了显著提升。安装后通过 “htop” 命令启动,它支持鼠标操作,让操作更加便捷直观;采用颜色高亮显示,不同资源使用情况用不同颜色区分,比如 CPU 使用率高的进程可能显示为红色,内存占用大的显示为黄色,使我们能一眼识别关键信息 。

        htop 还提供了树状视图,按下 “F5” 键即可切换,在这个视图下,进程间的父子关系清晰呈现,我们可以轻松了解进程的层次结构和依赖关系。在排序方面,点击列标题(如 CPU、MEM)就能按该列进行排序,或者按 “F6” 键选择更多排序方式。此外,htop 还支持搜索进程,按下 “F3” 键输入关键词,就能快速找到目标进程;按下 “F9” 键可以发送信号终止选中的进程,操作更加人性化。

        在实际定位性能瓶颈时,top 和 htop 发挥着重要作用。当系统出现响应缓慢的情况时,我们可以通过 top 或 htop 查看 CPU 使用率,若发现某个进程的 % CPU 持续居高不下,比如超过 80% 甚至更高,那么这个进程很可能是导致系统性能下降的原因之一。同样,通过观察内存使用率,若系统内存接近耗尽,且某个进程占用大量内存,也需要对其进行进一步分析和处理,可能需要优化该进程的内存使用,或者考虑增加系统内存。

2.2 vmstat

        vmstat(Virtual Meomory Statistics),即虚拟内存统计工具,可对操作系统的虚拟内存、进程、IO 读写、CPU 活动等进行全面监视 。它的指令路径通常为 “/usr/bin/vmstat”,在终端输入 “vmstat” 命令,默认会输出系统当前的各项统计信息。若想定时查看系统状态,可使用 “vmstat [间隔时间] [刷新次数]” 的格式,例如 “vmstat 5” 表示每 5 秒刷新一次系统状态信息。

        在输出信息中,“procs” 部分的 “r” 表示等待执行的任务数,当这个值超过 CPU 核心数时,就可能出现 CPU 瓶颈,因为过多的任务在竞争有限的 CPU 资源;“b” 代表等待 IO 的进程数量,若该值较大,说明系统中存在较多进程在等待 IO 操作完成,可能是磁盘 I/O 出现问题。

        “memory” 部分,“swpd” 表示正在使用的虚拟内存大小,单位为 KB;“free” 是空闲内存大小;“buff” 为已用的 buff 大小,主要用于对块设备的读写进行缓冲;“cache” 是已用的 cache 大小,用于文件系统的缓存。如果 “swpd” 的值持续增加,而 “free” 内存不断减少,可能意味着系统内存不足,开始频繁使用虚拟内存,这会导致系统性能下降。

        “swap” 部分的 “si” 表示每秒从交换区写入内存的大小,“so” 表示每秒从内存写到交换区的大小。若 “si” 和 “so” 的值较大,说明系统在频繁进行内存和交换区的数据交换,同样暗示内存不足。

        “io” 部分的 “bi” 表示每秒读取的块数,即读磁盘操作;“bo” 表示每秒写入的块数,即写磁盘操作。通过观察 “bi” 和 “bo” 的值,可以判断磁盘 I/O 的繁忙程度。

        “system” 部分的 “in” 表示每秒中断数,包括时钟中断等;“cs” 表示每秒上下文切换数。这两个值越大,说明内核消耗的 CPU 时间越多,可能是系统中进程切换频繁,或者存在硬件中断问题。

        “cpu” 部分,“us” 表示用户进程执行消耗的 CPU 时间百分比,若 “us” 值长期较高,比如超过 50%,可能需要优化程序算法或调整进程优先级;“sy” 是系统进程消耗的 CPU 时间百分比,“sy” 值过高,说明系统内核消耗资源较多,需要检查原因,可能是内核模块问题或者系统调用过于频繁;“id” 为空闲时间,包括 IO 等待时间;“wa” 表示等待 IO 时间,当 “wa” 过高时,表明磁盘 I/O 等待严重,可能是磁盘大量随机访问造成的,也可能是磁盘带宽出现瓶颈。

        通过 vmstat 获取的这些详细统计信息,我们可以综合判断系统负载情况。例如,当 “r” 值较高且 “us” 和 “sy” 值也较大时,说明 CPU 负载较重,可能需要优化 CPU 使用,如调整进程优先级或增加 CPU 资源;若 “wa” 值过高且 “bi” 和 “bo” 值较大,表明磁盘 I/O 存在问题,需要进一步分析磁盘性能并进行优化。

2.3 iostat

        iostat 主要用于监控磁盘 I/O 性能,对于确定磁盘是否存在瓶颈起着关键作用。在大多数 Linux 系统中,需要先安装 sysstat 软件包才能使用 iostat,安装完成后,在终端输入 “iostat” 命令即可查看系统磁盘 I/O 的基本信息。若要获取更详细的磁盘设备扩展信息,可使用 “iostat -x” 命令;若想以 KB 为单位显示数据,添加 “-k” 参数;“-m” 参数则是以 MB 为单位显示 。

        常见的使用方式如 “iostat -x -m 1”,表示每 1 秒输出一次磁盘 I/O 的详细统计信息,且以 MB 为单位显示。在输出结果中,“Device” 列显示磁盘名称,如 “sda”“sdb” 等。“r/s” 表示每秒完成的读 I/O 设备次数,“w/s” 表示每秒完成的写 I/O 设备次数,这两个指标反映了磁盘的读写操作频率。“rMB/s” 和 “wMB/s” 分别表示每秒读和写的数据大小,直观展示了磁盘的读写带宽。“avgqu-sz” 是平均 IO 队列长度,该值越低越好,若数值较大,说明有较多 I/O 请求在等待处理,磁盘可能存在性能问题。“await” 表示平均每次 IO 等待时间,单位为 ms,一般来说,当 “await” 超过 10ms 时,就需要关注磁盘性能了,可能存在 I/O 瓶颈。“svctm” 表示平均每次 IO 处理时间,单位为 ms,如果 “svctm” 比较接近 “await”,说明 I/O 几乎没有等待时间,磁盘性能较好;若 “await” 远大于 “svctm”,则说明 I/O 队列太长,io 响应太慢,需要进行优化。“% util” 表示在统计时间内磁盘处于繁忙状态的时间百分比,当 “% util” 接近 100% 时,说明磁盘产生的 I/O 请求太多,I/O 系统已经满负荷,磁盘很可能存在瓶颈 。

        假设我们在进行大数据存储时,发现数据写入速度很慢,通过 “iostat -x -m 1” 命令查看后,发现某块磁盘的 “% util” 持续保持在 90% 以上,“await” 值也远高于正常水平,达到了 50ms 甚至更高,这就表明该磁盘在写入操作上存在瓶颈,可能需要考虑升级磁盘设备、优化磁盘调度算法或者调整数据存储方式来提高磁盘 I/O 性能。

三、内核参数优化

        内核参数的优化是 Linux 系统性能调优的关键环节,通过合理调整内核参数,可以显著提升系统的整体性能和稳定性。接下来,我们将详细介绍几个重要的内核参数优化方法。

3.1 调整 swappiness 参数

        swappiness 是一个内核参数,它表示系统将内存数据交换到磁盘交换分区(swap)的倾向程度,取值范围是 0 - 100,单位为百分比。当系统物理内存不足时,会将内存中暂时不使用的页面数据转移到交换分区中,以腾出物理内存供其他进程使用。然而,磁盘 I/O 的速度远远低于内存访问速度,频繁的内存与交换分区的数据交换(即 swap in/out)会导致系统性能大幅下降。

        降低 swappiness 值,例如将其设置为 10,意味着系统会尽量优先使用物理内存,只有在物理内存几乎耗尽时,才会考虑使用交换分区。这样可以减少磁盘 I/O 操作,提高内存使用效率,从而提升系统性能。对于内存充足的服务器,尤其是运行对性能要求较高的应用(如数据库服务器),适当降低 swappiness 值是非常有效的性能优化手段。

        在 Linux 系统中,可以通过以下两种方式调整 swappiness 参数:

临时调整:在终端中输入命令 “sysctl vm.swappiness = [想要设置的值]”,例如 “sysctl vm.swappiness = 10”,即可将 swappiness 值临时设置为 10。这种方式设置的参数在系统重启后会恢复默认值。

永久调整:打开 “/etc/sysctl.conf” 文件,在文件末尾添加或修改 “vm.swappiness = [想要设置的值]” 这一行,然后执行 “sysctl -p” 命令使修改生效。这样设置后,系统在每次重启时都会读取该配置文件,从而保持 swappiness 值不变。

3.2 优化 I/O 调度器

        I/O 调度器负责管理和调度磁盘 I/O 请求,不同的 I/O 调度器采用不同的调度算法,适用于不同的应用场景。在 Linux 系统中,常见的 I/O 调度器有 noop、deadline 和 cfq,它们各自具有独特的特点和适用场景。

  • noop 调度器:noop 调度器采用简单的 FIFO(先进先出)队列,对 I/O 请求仅执行基本的合并操作,然后按顺序将请求发送到磁盘。它的算法非常简单,几乎不占用 CPU 资源 。由于固态硬盘(SSD)的寻道时间几乎为零,不需要复杂的调度算法来优化磁盘访问,因此 noop 调度器非常适合 SSD 存储设备,能够减少不必要的 I/O 请求重组,充分发挥 SSD 的高性能优势。此外,在资源受限的嵌入式系统中,noop 调度器的简单性也能有效减少 CPU 开销,提高系统整体性能。

  • deadline 调度器:deadline 调度器旨在减少 I/O 请求的延迟,它为每个 I/O 请求设置了一个截止时间,并维护两个队列,一个是按扇区排序的队列(sort queue),用于合并相邻扇区的请求,提高磁盘访问效率;另一个是按时间排序的队列(deadline queue),确保请求在截止时间内得到处理,避免某个请求长时间等待(即饥饿现象)。同时,该调度器会优先处理读请求,因为读操作通常对系统响应速度影响更大,但也会定期处理写请求,以保证读写操作的平衡。因此,deadline 调度器非常适合高 I/O 负载的服务器,如数据库服务器和 Web 服务器,这些场景对磁盘 I/O 的吞吐量和响应时间要求较高,需要确保数据的快速读写。

  • cfq 调度器(Completely Fair Queueing):cfq 调度器的核心特点是公平性,它为每个进程分配一个 I/O 请求队列,并为每个队列分配时间片,系统轮流处理各进程的 I/O 请求,从而确保所有进程都能公平地访问磁盘资源。这种调度方式使得不同进程在竞争磁盘 I/O 时能够获得相对均衡的带宽分配,避免某个进程独占磁盘资源而导致其他进程饥饿。因此,cfq 调度器适用于桌面系统和多用户环境,在这些场景中,通常有多个不同类型的进程同时运行,需要保证每个进程都能有良好的 I/O 性能体验,例如在桌面系统中同时运行办公软件、浏览器、多媒体播放器等多个应用程序时,cfq 调度器能够使它们都能顺畅运行,不会因为某个应用程序的大量 I/O 操作而影响其他应用的响应速度 。

        要查看当前系统正在使用的 I/O 调度器,可以使用命令 “cat /sys/block/[磁盘设备名称]/queue/scheduler”,例如 “cat /sys/block/sda/queue/scheduler”,其中 “sda” 是磁盘设备名称,根据实际情况进行替换。如果要临时切换 I/O 调度器,可以使用命令 “echo [调度器名称] > /sys/block/[磁盘设备名称]/queue/scheduler”,例如要将磁盘 “sd

你可能感兴趣的:(Linux,linux,运维)