学习目标

  • 理解本节涉及的核心主题:系统性能下降、检查系统负载,查看 CPU 和内存使用情况、优化进程优先级,释放不必要的资源、优化磁盘 I/O。
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:系统性能下降、检查系统负载,查看 CPU 和内存使用情况、优化进程优先级,释放不必要的资源、优化磁盘 I/O
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

常见问题与解决方案

系统性能下降

系统性能下降可能由于资源过载、配置不当或硬件故障等多种原因导致。及时诊断和优化系统性能,是确保系统稳定运行的关键。

检查系统负载,查看 CPU 和内存使用情况

  • 使用 top htop 监控实时资源使用
    使用 top

    top
    

    示例输出:

    top - 12:34:56 up 10 days,  3:45,  2 users,  load average: 1.23, 0.98, 0.75
    Tasks: 150 total,   1 running, 149 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  5.0 us,  3.0 sy,  0.0 ni, 90.0 id,  2.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  16384000 total,   2100000 free,   4200000 used,  10084000 buff/cache
    KiB Swap:   8388608 total,   8388608 free,         0 used.  10400000 avail Mem
    

    使用 htop

    sudo apt install htop
    htop
    

    示例输出:

    说明:

    • htop 提供了更友好的图形化界面,支持鼠标操作和自定义显示。
  • 使用 vmstat 查看内存与交换空间状态
    vmstat 命令提供了系统虚拟内存、进程、CPU 等的统计信息。

    vmstat 1 5
    

    示例输出:

    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0      0 2147484  524288  8388608    0    0     0     0   45   78  5  2 93  0  0
     1  0      0 2147484  524288  8388608    0    0     0     0   30   55  3  1 96  0  0
     0  0      0 2147484  524288  8388608    0    0     0     0   50  100  4  2 94  0  0
     1  0      0 2147484  524288  8388608    0    0     0     0   35   70  6  3 91  0  0
     0  0      0 2147484  524288  8388608    0    0     0     0   40   80  5  2 93  0  0
    

    字段说明:

    • procs
      • r:运行队列中的进程数。
      • b:等待 I/O 的进程数。
    • memory
      • swpd:已使用的交换空间(KB)。
      • free:空闲内存(KB)。
      • buff:缓冲区使用的内存(KB)。
      • cache:缓存使用的内存(KB)。
    • swap
      • si:从交换空间交换到内存的数据量(KB/s)。
      • so:从内存交换到交换空间的数据量(KB/s)。
    • io
      • bi:块设备读取数据量(块/s)。
      • bo:块设备写入数据量(块/s)。
    • system
      • in:每秒中断数。
      • cs:每秒上下文切换数。
    • cpu
      • us:用户空间占用的 CPU 百分比。
      • sy:内核空间占用的 CPU 百分比。
      • id:空闲 CPU 百分比。
      • wa:等待 I/O 的 CPU 百分比。
      • st:被虚拟机偷走的 CPU 百分比。 分析示例:
    • siso 表示交换活动频繁,可能是内存不足。
    • wa 表示 I/O 等待时间长,可能是磁盘性能瓶颈。
    • r 表示系统负载较高,可能需要优化进程或增加 CPU。
  • 使用 sar 收集历史性能数据
    sarsysstat 包中的一个工具,用于收集和报告系统活动信息,包括 CPU、内存、磁盘和网络等。

    sudo apt install sysstat
    sar -u 1 5
    

    示例输出:

    12:00:01 PM    CPU     %user     %nice   %system   %iowait    %steal     %idle
    12:00:02 PM    all      5.00      0.00      3.00      0.50      0.00     91.50
    12:00:03 PM    all      4.50      0.00      2.50      0.30      0.00     92.70
    12:00:04 PM    all      6.00      0.00      4.00      0.60      0.00     89.40
    12:00:05 PM    all      3.50      0.00      1.50      0.20      0.00     94.80
    12:00:06 PM    all      5.50      0.00      3.50      0.40      0.00     90.60
    

    说明:

    • 使用 sar 可以分析系统在特定时间段内的性能变化,帮助识别性能趋势和异常。

优化进程优先级,释放不必要的资源

当系统性能下降时,调整进程优先级和释放不必要的资源可以显著提升系统响应速度和整体性能。

  • 使用 nice renice 调整进程优先级

    • nice 命令
      用于启动新进程时设置其优先级,优先级值(niceness)范围从 -20(最高优先级)到 19(最低优先级),默认值为 0
      示例:
      启动一个进程,并设置优先级为 10

      nice -n 10 myapp
      

      说明:

      • 较高的 niceness 值(如 10)会降低进程的 CPU 优先级,减少其对系统资源的占用。
    • renice 命令
      用于修改正在运行的进程的优先级。
      示例:
      将 PID 为 1234 的进程优先级调整为 5

      sudo renice -n 5 1234
      

      说明:

      • 需要具有足够的权限(通常是超级用户)才能降低进程的优先级(设置为更高的 niceness 值)。
  • 使用 top htop 查找高 CPU 使用进程

    1. 启动 top htop

      top
      

      htop
      
    2. %CPU 列排序
      top 中,按 P 键按 CPU 使用率排序。
      htop 中,按 F6 键,选择 %CPU 作为排序依据。

    3. 识别高 CPU 使用进程
      查看顶部列出的进程,找出消耗大量 CPU 的应用程序或服务。

  • 使用 kill 终止不必要的进程
    如果某些进程消耗过多资源且不必要,可以终止它们以释放系统资源。

    sudo kill -9 PID
    

    说明:

    • -9 信号强制终止进程,确保其立即停止。
    • 警告:使用 kill -9 可能导致数据丢失,建议优先尝试温和的终止信号(如 kill PIDkill -15 PID)。
  • 停止不必要的服务与守护进程
    识别并停止不需要的系统服务,减少资源占用。

    sudo systemctl stop service_name
    sudo systemctl disable service_name
    

    示例:

    停止并禁用 Bluetooth 服务:

    sudo systemctl stop bluetooth
    sudo systemctl disable bluetooth
    
  • 清理系统缓存(sync && sudo sysctl -w vm.drop_caches=3
    清理系统缓存可以释放内存资源,但通常不建议频繁执行,因为缓存有助于提高系统性能。

    sudo sync
    sudo sysctl -w vm.drop_caches=3
    

    说明:

    • sync:将所有挂起的写操作写入磁盘。
    • vm.drop_caches=3:清理页缓存、目录项缓存和 inode 缓存。 注意事项:
    • 清理缓存后,系统性能可能暂时下降,因为需要重新加载被清理的缓存。

优化磁盘 I/O

磁盘 I/O 是影响系统性能的重要因素,优化磁盘 I/O 可以显著提升系统响应速度和吞吐量。

  • 使用 iotop 监控磁盘 I/O 活动
    iotop 是一个实时监控磁盘 I/O 使用情况的工具,类似于 top,但专注于磁盘操作。
    • 安装 iotop

      sudo apt install iotop    # Debian/Ubuntu
      sudo yum install iotop    # CentOS/RHEL
      sudo dnf install iotop    # Fedora
      
    • 启动 iotop

      sudo iotop
      

      示例输出:

      Total DISK READ:  0.00 B/s | Total DISK WRITE:  0.00 B/s
      PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
      1234 be/4 alice      0.00 B/s    0.00 B/s  0.00 %  0.00 %  myapp
      5678 be/4 bob        0.00 B/s    1.00 MB/s 0.00 %  0.00 %  nginx
      
    • 说明:

      • PID:进程 ID。
      • PRIO:进程优先级。
      • USER:进程所有者。
      • DISK READDISK WRITE:进程的磁盘读取和写入速率。
      • COMMAND:运行的命令。
  • 优化磁盘 I/O
    • 调整 I/O 调度器
      Linux 提供多种 I/O 调度器,如 cfqdeadlinenoop,根据系统需求选择合适的调度器。
      查看当前调度器

      cat /sys/block/sda/queue/scheduler
      

      示例输出:

      noop deadline [cfq]
      

      切换 I/O 调度器

      将调度器切换为 deadline

      echo deadline | sudo tee /sys/block/sda/queue/scheduler
      
    • 使用 hdparm 优化磁盘性能
      hdparm 可用于配置硬盘的性能参数,如启用 DMA、调整读写缓存。

      • 启用 DMA
        sudo hdparm -d1 /dev/sda
        
      • 开启读缓存
        sudo hdparm -W1 /dev/sda
        
    • 优化文件系统
      文件系统的优化可以提升磁盘性能,常见的优化方法包括调整挂载选项和使用更高效的文件系统。

      • 调整挂载选项
        /etc/fstab 文件中添加优化选项,如 noatimenodiratime,减少不必要的磁盘写入。
        示例:
        /dev/sda1   /home   ext4   defaults,noatime   0 2
        
      • 选择高性能文件系统
        根据需求选择合适的文件系统,如 ext4xfsbtrfs,优化磁盘性能和数据管理。
示例与应用场景
  • 数据库服务器优化
    调整 I/O 调度器为 deadline,优化磁盘读写性能,提升数据库查询速度。
  • Web 服务器高负载优化
    通过 iotop 监控磁盘 I/O,识别并优化高 I/O 进程,确保 Web 服务的高性能和稳定性。

系统性能下降可能由于资源过载、配置不当或硬件故障等多种原因导致。及时诊断和优化系统性能,是确保系统稳定运行的关键。

检查系统负载,查看 CPU 和内存使用情况

  • 使用 top htop 监控实时资源使用
    使用 top

    top
    

    示例输出:

    top - 12:34:56 up 10 days,  3:45,  2 users,  load average: 1.23, 0.98, 0.75
    Tasks: 150 total,   1 running, 149 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  5.0 us,  3.0 sy,  0.0 ni, 90.0 id,  2.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  16384000 total,   2100000 free,   4200000 used,  10084000 buff/cache
    KiB Swap:   8388608 total,   8388608 free,         0 used.  10400000 avail Mem
    

    使用 htop

    sudo apt install htop
    htop
    

    示例输出:

    说明:

    • htop 提供了更友好的图形化界面,支持鼠标操作和自定义显示。
  • 使用 vmstat 查看内存与交换空间状态
    vmstat 命令提供了系统虚拟内存、进程、I/O 和 CPU 的统计信息。

    vmstat 1 5
    

    示例输出:

    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0      0 2147484  524288  8388608    0    0     0     0   45   78  5  2 93  0  0
     1  0      0 2147484  524288  8388608    0    0     0     0   30   55  3  1 96  0  0
     0  0      0 2147484  524288  8388608    0    0     0     0   50  100  4  2 94  0  0
     1  0      0 2147484  524288  8388608    0    0     0     0   35   70  6  3 91  0  0
     0  0      0 2147484  524288  8388608    0    0     0     0   40   80  5  2 93  0  0
    

    字段说明:

    • procs
      • r:运行队列中的进程数。
      • b:等待 I/O 的进程数。
    • memory
      • swpd:已使用的交换空间(KB)。
      • free:空闲内存(KB)。
      • buff:缓冲区使用的内存(KB)。
      • cache:缓存使用的内存(KB)。
    • swap
      • si:从交换空间交换到内存的数据量(KB/s)。
      • so:从内存交换到交换空间的数据量(KB/s)。
    • io
      • bi:块设备读取数据量(块/s)。
      • bo:块设备写入数据量(块/s)。
    • system
      • in:每秒中断数。
      • cs:每秒上下文切换数。
    • cpu
      • us:用户空间占用的 CPU 百分比。
      • sy:内核空间占用的 CPU 百分比。
      • id:空闲 CPU 百分比。
      • wa:等待 I/O 的 CPU 百分比。
      • st:被虚拟机偷走的 CPU 百分比。 分析示例:
    • siso 表示交换活动频繁,可能是内存不足。
    • wa 表示 I/O 等待时间长,可能是磁盘性能瓶颈。
    • r 表示系统负载较高,可能需要优化进程或增加 CPU。
  • 使用 sar 收集历史性能数据
    sarsysstat 包中的一个工具,用于收集和报告系统活动信息,包括 CPU、内存、磁盘和网络等。

    sudo apt install sysstat
    sar -u 1 5
    

    示例输出:

    12:00:01 PM    CPU     %user     %nice   %system   %iowait    %steal     %idle
    12:00:02 PM    all      5.00      0.00      3.00      0.50      0.00     91.50
    12:00:03 PM    all      4.50      0.00      2.50      0.30      0.00     92.70
    12:00:04 PM    all      6.00      0.00      4.00      0.60      0.00     89.40
    12:00:05 PM    all      3.50      0.00      1.50      0.20      0.00     94.80
    12:00:06 PM    all      5.50      0.00      3.50      0.40      0.00     90.60
    

    说明:

    • 使用 sar 可以分析系统在特定时间段内的性能变化,帮助识别性能趋势和异常。

优化进程优先级,释放不必要的资源

当系统性能下降时,调整进程优先级和释放不必要的资源可以显著提升系统响应速度和整体性能。

  • 使用 nice renice 调整进程优先级

    • nice 命令
      nice 用于启动新进程时设置其优先级,优先级值(niceness)范围从 -20(最高优先级)到 19(最低优先级),默认值为 0
      示例:
      启动一个进程,并设置优先级为 10

      nice -n 10 myapp
      

      说明:

      • 较高的 niceness 值(如 10)会降低进程的 CPU 优先级,减少其对系统资源的占用。
    • renice 命令
      renice 用于修改正在运行的进程的优先级。
      示例:
      将 PID 为 1234 的进程优先级调整为 5

      sudo renice -n 5 1234
      

      说明:

      • 需要具有足够的权限(通常是超级用户)才能降低进程的优先级(设置为更高的 niceness 值)。
  • 使用 top htop 查找高 CPU 使用进程

    1. 启动 top htop

      top
      

      htop
      
    2. %CPU 列排序
      top 中,按 P 键按 CPU 使用率排序。
      htop 中,按 F6 键,选择 %CPU 作为排序依据。

    3. 识别高 CPU 使用进程
      查看顶部列出的进程,找出消耗大量 CPU 的应用程序或服务。

  • 使用 kill 终止不必要的进程
    如果某些进程消耗过多资源且不必要,可以终止它们以释放系统资源。

    sudo kill -9 PID
    

    说明:

    • -9 信号强制终止进程,确保其立即停止。
    • 警告:使用 kill -9 可能导致数据丢失,建议优先尝试温和的终止信号(如 kill PIDkill -15 PID)。
  • 停止不必要的服务与守护进程
    识别并停止不需要的系统服务,减少资源占用。

    sudo systemctl stop service_name
    sudo systemctl disable service_name
    

    示例:

    停止并禁用 Bluetooth 服务:

    sudo systemctl stop bluetooth
    sudo systemctl disable bluetooth
    
  • 清理系统缓存(sync && sudo sysctl -w vm.drop_caches=3
    清理系统缓存可以释放内存资源,但通常不建议频繁执行,因为缓存有助于提高系统性能。

    sudo sync
    sudo sysctl -w vm.drop_caches=3
    

    说明:

    • sync:将所有挂起的写操作写入磁盘。
    • vm.drop_caches=3:清理页缓存、目录项缓存和 inode 缓存。 注意事项:
    • 清理缓存后,系统性能可能暂时下降,因为需要重新加载被清理的缓存。

优化磁盘 I/O

磁盘 I/O 是影响系统性能的重要因素,优化磁盘 I/O 可以显著提升系统响应速度和吞吐量。

  • 使用 iotop 监控磁盘 I/O 活动
    iotop 是一个实时监控磁盘 I/O 使用情况的工具,类似于 top,但专注于磁盘操作。
    • 安装 iotop

      sudo apt install iotop    # Debian/Ubuntu
      sudo yum install iotop    # CentOS/RHEL
      sudo dnf install iotop    # Fedora
      
    • 启动 iotop

      sudo iotop
      

      示例输出:

      Total DISK READ:  0.00 B/s | Total DISK WRITE:  0.00 B/s
      PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
      1234 be/4 alice      0.00 B/s    0.00 B/s  0.00 %  0.00 %  myapp
      5678 be/4 bob        0.00 B/s    1.00 MB/s 0.00 %  0.00 %  nginx
      
    • 说明:

      • PID:进程 ID。
      • PRIO:进程优先级。
      • USER:进程所有者。
      • DISK READDISK WRITE:进程的磁盘读取和写入速率。
      • COMMAND:运行的命令。
  • 优化磁盘 I/O
    • 调整 I/O 调度器
      Linux 提供多种 I/O 调度器,如 cfqdeadlinenoop,根据系统需求选择合适的调度器。
      查看当前调度器

      cat /sys/block/sda/queue/scheduler
      

      示例输出:

      noop deadline [cfq]
      

      切换 I/O 调度器

      将调度器切换为 deadline

      echo deadline | sudo tee /sys/block/sda/queue/scheduler
      
    • 使用 hdparm 优化磁盘性能
      hdparm 可用于配置硬盘的性能参数,如启用 DMA、调整读写缓存。

      • 启用 DMA
        sudo hdparm -d1 /dev/sda
        
      • 开启读缓存
        sudo hdparm -W1 /dev/sda
        
    • 优化文件系统
      文件系统的优化可以提升磁盘性能,常见的优化方法包括调整挂载选项和使用更高效的文件系统。

      • 调整挂载选项
        /etc/fstab 文件中添加优化选项,如 noatimenodiratime,减少不必要的磁盘写入。
        示例:
        /dev/sda1   /home   ext4   defaults,noatime   0 2
        
      • 选择高性能文件系统
        根据需求选择合适的文件系统,如 ext4xfsbtrfs,优化磁盘性能和数据管理。
示例与应用场景
  • 数据库服务器优化
    调整 I/O 调度器为 deadline,优化磁盘读写性能,提升数据库查询速度。

    echo deadline | sudo tee /sys/block/sda/queue/scheduler
    
  • Web 服务器高负载优化
    通过 iotop 监控磁盘 I/O,识别并优化高 I/O 进程,确保 Web 服务的高性能和稳定性。

    sudo iotop
    

    示例:

    如果发现 nginx 进程正在进行大量磁盘写入操作,可以优化其日志配置,减少磁盘 I/O:

    http {
        access_log /var/log/nginx/access.log main buffer=16k flush=1m;
        error_log /var/log/nginx/error.log warn;
        ...
    }
    

本节总结

  • 本节主要围绕 系统性能下降、检查系统负载,查看 CPU 和内存使用情况、优化进程优先级,释放不必要的资源、优化磁盘 I/O 展开。
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。