学习目标

  • 理解本节涉及的核心主题:Linux 性能监控与优化、系统性能优化、磁盘优化、磁盘优化示例。
  • 掌握重点命令或工具:sarsysstat
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 性能监控与优化、系统性能优化、磁盘优化、磁盘优化示例、日志与系统监控工具、使用 sarsysstat 进行性能分析
  • 重点命令:sarsysstat
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 性能监控与优化

系统性能优化

磁盘优化

磁盘优化通过调整文件系统、管理分区和优化 RAID 配置,提升磁盘性能和存储效率。

文件系统调整与优化
  • 选择合适的文件系统
    不同的文件系统在性能、可靠性和功能上有所不同。选择适合需求的文件系统,可以提升系统性能和数据安全性。
    常见文件系统比较:| 文件系统 | 优点 | 缺点 |
    | -------- | ------------------------------------ | ---------------------------------- |
    | ext4 | 稳定、性能良好、广泛支持 | 缺乏某些高级功能 |
    | xfs | 高性能、大文件支持、适用于高并发场景 | 不适合小文件 |
    | btrfs | 支持快照、子卷、压缩等高级功能 | 相对不够稳定,适用于测试和特定场景 |
    | ZFS | 数据完整性保障、快照、复制等功能丰富 | 资源消耗较高,许可限制 |
  • 优化挂载选项
    合理的挂载选项可以提升文件系统的性能和效率。
    • noatime:禁用访问时间记录,减少磁盘写入,提高性能。
      示例:
      /etc/fstab 文件中添加 noatime 选项:
      /dev/sda1   /home   ext4   defaults,noatime   0 2
      
    • nodiratime:仅禁用目录的访问时间记录,适用于需要部分访问时间记录的场景。
      示例:
      /dev/sda1   /var    ext4   defaults,nodiratime   0 2
      
    • 其他挂载选项
      • defaults:使用默认挂载选项。
      • relatime:仅在文件数据或元数据被修改时更新访问时间,兼顾性能与功能。
磁盘分区优化与管理
  • 使用 fdisk gdisk 管理分区
    fdisk(适用于 MBR 分区表)和 gdisk(适用于 GPT 分区表)是常用的磁盘分区工具。
    示例:使用 fdisk 创建新分区

    sudo fdisk /dev/sdb
    

    常用命令:

    • n:创建新分区。
    • d:删除分区。
    • p:打印分区表。
    • w:保存并退出。 示例:使用 gdisk 创建新 GPT 分区
    sudo gdisk /dev/sdb
    

    常用命令:

    • n:创建新分区。
    • d:删除分区。
    • p:打印分区表。
    • w:保存并退出。
  • 使用 lsblk blkid 查看分区信息
    lsblk 显示块设备信息,包括分区和挂载点。

    lsblk
    

    示例输出:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   50G  0 disk
    ├─sda1   8:1    0   50G  0 part /
    sdb      8:16   0  100G  0 disk
    └─sdb1   8:17   0  100G  0 part /data
    

    blkid 显示设备的 UUID 和文件系统类型。

    sudo blkid
    

    示例输出:

    /dev/sda1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"
    /dev/sdb1: UUID="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" TYPE="xfs"
    
  • 优化 RAID 配置与性能
    RAID(Redundant Array of Independent Disks)通过将多个磁盘组合在一起,提高数据冗余性和性能。合理配置 RAID 可以提升系统的存储能力和可靠性。

    • 选择合适的 RAID 级别

      RAID 级别 描述 优点 缺点
      RAID 0 条带化,提升性能,数据无冗余 高性能 无数据冗余,单盘故障导致数据丢失
      RAID 1 镜像,数据冗余,提升读取性能 数据冗余,故障恢复简单 存储效率低,成本高
      RAID 5 带奇偶校验的条带化,兼顾性能和冗余 高存储效率,数据冗余 写入性能较低,重建时间长
      RAID 6 双重奇偶校验,提供更高的数据冗余 更高的数据冗余,容错能力更强 存储效率进一步降低
      RAID 10 镜像与条带化的结合,兼顾性能和冗余 高性能,高冗余 高成本,存储效率为50%
    • 配置 RAID
      示例:使用 mdadm 配置 RAID 1

      1. 安装 mdadm 工具
        sudo apt install mdadm    # Debian/Ubuntu
        sudo yum install mdadm    # CentOS/RHEL
        sudo dnf install mdadm    # Fedora
        
      2. 创建 RAID 1 阵列
        sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
        
      3. 查看 RAID 阵列状态
        cat /proc/mdstat
        
      4. 保存 RAID 配置
        sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
        sudo update-initramfs -u    # Debian/Ubuntu
        
      5. 格式化 RAID 阵列
        sudo mkfs.ext4 /dev/md0
        
      6. 挂载 RAID 阵列
        sudo mkdir -p /mnt/raid1
        sudo mount /dev/md0 /mnt/raid1
        

      注意事项:

      • 确保 RAID 阵列的所有磁盘健康无误。
      • 定期监控 RAID 阵列状态,及时处理磁盘故障。
磁盘分区优化与管理最佳实践
  • 合理划分分区
    根据系统用途和应用需求,合理划分磁盘分区,有助于提升性能和管理效率。例如,将 /home/var/tmp 等目录划分到独立的分区,避免单一分区占满导致整个系统无法正常运行。

  • 使用合适的挂载选项
    根据文件系统类型和使用场景,选择合适的挂载选项,如 noatimenodiratime 等,以优化文件访问性能。

  • 定期检查磁盘健康
    使用工具如 smartctl 检查磁盘的健康状况,预防磁盘故障。
    示例:

    sudo apt install smartmontools    # Debian/Ubuntu
    sudo yum install smartmontools    # CentOS/RHEL
    sudo dnf install smartmontools    # Fedora
    

    查看磁盘健康状态

    sudo smartctl -a /dev/sda
    

    定期运行 SMART 测试

    sudo smartctl -t long /dev/sda
    

磁盘优化示例

  • 选择适合的文件系统
    例如,选择 ext4 作为根文件系统,xfs 作为 /var 目录的文件系统,以利用其高性能和稳定性。
    示例:
    在安装系统时,选择相应的文件系统类型:

    Device        Boot   Start      End  Sectors  Size Type
    /dev/sda1     *       2048   1050623 1048576  512M EFI System
    /dev/sda2           1050624 20971519 19920896  9.5G Linux filesystem
    /dev/sda3          20971520 41943039 20971520 10.0G Linux filesystem
    
    • /dev/sda2 使用 ext4 作为根文件系统。
    • /dev/sda3 使用 xfs 作为 /var 目录。
  • 优化挂载选项
    /etc/fstab 文件中,为根文件系统和 /var 目录添加 noatime 挂载选项,减少磁盘写入,提高性能。
    示例:

    /dev/sda2   /       ext4    defaults,noatime   0 1
    /dev/sda3   /var    xfs     defaults,noatime   0 2
    
  • 配置 RAID 10 提升磁盘性能和冗余
    通过配置 RAID 10,将数据镜像和条带化结合,提升磁盘性能和数据冗余性。
    步骤:

    1. 创建 RAID 10 阵列
      sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
      
    2. 查看 RAID 阵列状态
      cat /proc/mdstat
      
    3. 保存 RAID 配置
      sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
      sudo update-initramfs -u    # Debian/Ubuntu
      
    4. 格式化 RAID 阵列
      sudo mkfs.ext4 /dev/md0
      
    5. 挂载 RAID 阵列
      sudo mkdir -p /mnt/raid10
      sudo mount /dev/md0 /mnt/raid10
      
磁盘优化最佳实践
  • 合理规划分区和文件系统类型:根据系统用途选择合适的分区布局和文件系统类型,以优化性能和数据安全。
  • 使用适当的挂载选项:如 noatimenodiratime 等,减少不必要的磁盘写入。
  • 定期监控磁盘健康:使用 smartctl 等工具,定期检查磁盘健康状况,预防潜在故障。
  • 配置 RAID 提升性能和冗余:根据需求选择合适的 RAID 级别,提升磁盘性能和数据冗余性。

日志与系统监控工具

日志与系统监控工具是性能分析和优化的重要辅助工具。通过这些工具,可以收集、分析系统性能数据,自动化报警和生成性能报告,帮助系统管理员及时发现并解决性能问题。

使用 sarsysstat 进行性能分析

sar(System Activity Reporter)是 sysstat 包中的一个工具,用于收集、报告系统活动信息。sysstat 包还包含其他性能监控工具,如 iostatmpstat 等。

安装与配置 sysstat
  • 安装命令

    sudo apt install sysstat    # Debian/Ubuntu
    sudo yum install sysstat    # CentOS/RHEL
    sudo dnf install sysstat    # Fedora
    
  • 启用数据收集
    编辑 /etc/default/sysstat(Debian/Ubuntu)或 /etc/sysconfig/sysstat(CentOS/RHEL)文件,设置 ENABLED="true"
    Debian/Ubuntu 示例:

    sudo nano /etc/default/sysstat
    
    ENABLED="true"
    

    CentOS/RHEL 示例:

    sudo nano /etc/sysconfig/sysstat
    
    ENABLED="true"
    

    重新启动 sysstat 服务:

    sudo systemctl enable sysstat
    sudo systemctl start sysstat
    
使用 sar 收集与分析系统性能数据
  • 基本用法
    sar 可以显示系统的各种性能指标,如 CPU、内存、磁盘、网络等。
    查看 CPU 使用情况

    sar -u 1 5
    

    说明:

    • -u:显示 CPU 使用率。
    • 1:每隔1秒采样一次。
    • 5:采样5次。 示例输出:
    04:00:01 PM    CPU     %user     %nice   %system   %iowait    %steal     %idle
    04:00:02 PM    all      5.00      0.00      3.00      0.50      0.00     91.50
    04:00:03 PM    all      4.50      0.00      2.50      0.30      0.00     92.70
    04:00:04 PM    all      6.00      0.00      4.00      0.60      0.00     89.40
    04:00:05 PM    all      3.50      0.00      1.50      0.20      0.00     94.80
    04:00:06 PM    all      5.50      0.00      3.50      0.40      0.00     90.60
    
  • 解释 sar 输出
    字段说明:

    • %user:用户空间占用的 CPU 百分比。
    • %system:内核空间占用的 CPU 百分比。
    • %iowait:等待 I/O 操作的 CPU 百分比。
    • %idle:空闲 CPU 百分比。 分析示例:
    • 如果 %iowait 长时间较高,可能表示磁盘 I/O 性能瓶颈。
    • 如果 %user%system 都较高,可能表示 CPU 负载过重,需要优化应用程序或增加 CPU 资源。
  • 查看内存使用情况

    sar -r 1 5
    

    说明:

    • -r:显示内存使用情况。 示例输出:
    04:00:01 PM kbmemfree kbmemused  %memused kbbuffers  kbcached
    04:00:02 PM    2100000    4200000      71.9      524288    8388608
    04:00:03 PM    2080000    4220000      72.3      524288    8388608
    04:00:04 PM    2050000    4250000      72.8      524288    8388608
    04:00:05 PM    2030000    4270000      73.2      524288    8388608
    04:00:06 PM    2000000    4300000      73.7      524288    8388608
    

    字段说明:

    • kbmemfree:空闲内存(KB)。
    • kbmemused:已使用内存(KB)。
    • %memused:内存使用百分比。
    • kbbuffers:缓冲区使用的内存(KB)。
    • kbcached:缓存使用的内存(KB)。 分析示例:
    • %memused 可能表示系统内存压力大,需要优化内存使用或增加物理内存。
    • 监控 kbcached 可以了解系统缓存的使用情况,有助于优化文件系统性能。

磁盘使用

磁盘使用情况直接影响系统的存储能力和读写性能。通过监控磁盘空间和 I/O 活动,可以预防磁盘满溢和性能瓶颈。

使用 df 查看磁盘空间

df(Disk Free)命令用于显示文件系统的磁盘空间使用情况。

  • 基本用法

    df
    
  • 常用选项

    • -h:以人类可读的格式显示(如 GB、MB)。
    • -T:显示文件系统类型。
    • -i:显示 inode 使用情况。 示例:
    df -hT
    

    示例输出:

    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda1      ext4       50G   20G   28G  42% /
    tmpfs          tmpfs     2.0G     0  2.0G   0% /dev/shm
    /dev/sdb1      xfs       100G   60G   40G  60% /data
    
  • 理解各分区的使用情况

    • Filesystem:文件系统名称或设备。
    • Type:文件系统类型(如 ext4, xfs)。
    • Size:总大小。
    • Used:已使用空间。
    • Avail:可用空间。
    • Use%:使用百分比。
    • Mounted on:挂载点。
使用 du 分析目录占用

du(Disk Usage)命令用于估算文件和目录的磁盘使用量,帮助识别占用大量空间的目录或文件。

  • 基本用法

    du /path/to/directory
    
  • 常用选项

    • -h:以人类可读的格式显示。
    • -s:显示总计。
    • -d N:显示到 N 级深度的目录。
    • --max-depth=N:与 -d 类似,指定最大目录深度。 示例:
    du -sh /var/log
    

    示例输出:

    500M    /var/log
    
  • 识别占用大量空间的目录或文件
    示例:

    du -ah /var | sort -hr | head -n 20
    

    说明:

    • -a:显示所有文件和目录。
    • sort -hr:按人类可读的格式逆序排序。
    • head -n 20:显示前20个结果。 示例输出:
    2.0G    /var/log
    1.5G    /var/log/nginx
    1.2G    /var/log/mysql
    500M    /var/www/html
    ...
    
使用 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
    
  • 识别高 I/O 进程
    iotop 界面中,查看正在进行大量读写操作的进程,帮助识别性能瓶颈。
    示例:

    Total DISK READ:  0.00 B/s | Total DISK WRITE:  0.00 B/s
    TID  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
    

    在此示例中,nginx 进程正在进行大量磁盘写入操作,可能需要优化其配置或资源使用。

磁盘使用监控最佳实践
  • 定期检查磁盘空间
    使用 dfdu 定期检查系统的磁盘空间使用情况,确保关键分区有足够的可用空间。
  • 识别并清理不必要的文件
    通过 du 识别占用大量空间的目录或文件,及时清理不再需要的数据,释放磁盘空间。
  • 监控磁盘 I/O 活动
    使用 iotop 实时监控磁盘 I/O 活动,识别性能瓶颈和异常读写操作,采取相应的优化措施。

网络带宽监控

网络带宽监控有助于了解网络流量的使用情况,识别异常流量和潜在的网络问题,确保网络资源的合理利用。

使用 iftop 监控实时网络流量

iftop 是一个实时流量监控工具,显示网络接口上的流量和连接情况。

  • 安装与基本用法
    安装 iftop

    sudo apt install iftop    # Debian/Ubuntu
    sudo yum install iftop    # CentOS/RHEL
    sudo dnf install iftop    # Fedora
    

    启动 iftop

    sudo iftop -i eth0
    

    说明:

    • -i eth0:指定要监控的网络接口(如 eth0wlan0)。
  • 识别高流量连接
    iftop 界面中,查看哪些 IP 地址或端口正在消耗大量带宽,帮助识别潜在的网络问题或攻击。
    示例:

    Total send rate:  1.00 Gbits/sec  Total receive rate:  500 Mbits/sec
    192.168.1.100:443                500 Mbits/sec   200 Mbits/sec    example.com
    10.0.0.5:22                      300 Mbits/sec    100 Mbits/sec    remote.server.com
    
使用 nload 查看网络流量统计

nload 是一个简单的网络流量监控工具,显示网络接口的上传和下载流量统计。

  • 安装与基本用法
    安装 nload

    sudo apt install nload    # Debian/Ubuntu
    sudo yum install nload    # CentOS/RHEL
    sudo dnf install nload    # Fedora
    

    启动 nload

    nload eth0
    

    说明:

    • eth0:指定要监控的网络接口。
  • 分析上传与下载流量
    nload 提供了实时的上传(TX)和下载(RX)流量图表,帮助用户直观地了解网络流量的动态变化。
    示例:

    eth0 [####################--------------------]   1.00 KB/s  |   500.00 KB/s
    

    字段说明:

    • 上传流量(TX):发送到网络的流量。
    • 下载流量(RX):从网络接收的流量。
网络带宽监控最佳实践
  • 监控关键网络接口
    重点监控关键网络接口(如服务器的 eth0eth1),确保网络流量在预期范围内。
  • 识别异常流量
    通过监控工具识别异常高的流量或不寻常的连接,及时发现潜在的网络攻击或配置问题。
  • 设置流量阈值
    根据系统需求设置流量阈值,当网络流量超过预定范围时,触发报警或采取自动化措施。

系统性能优化

系统性能优化通过调整系统配置和优化资源使用,提升系统整体性能和响应速度。以下将介绍针对 CPU、内存和磁盘等关键资源的优化策略。

优化 CPU 使用

高 CPU 使用率可能导致系统响应缓慢,甚至无法处理新任务。通过调整进程优先级和优化高 CPU 使用进程,可以改善系统性能。

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

    nice -n 10 myapp
    

    说明:

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

    renice -n 5 1234
    

    说明:

    • 需要具有足够的权限(通常是超级用户)才能降低进程的优先级(设置为更高的 niceness 值)。
识别并优化高 CPU 使用进程
  • 使用 top htop 查找高 CPU 使用进程
    tophtop 中,按 %CPU 列排序,找到消耗大量 CPU 资源的进程。
    示例(使用 htop):
    1. 启动 htop
      htop
      
    2. %CPU 排序:
      F6 键,选择 %CPU 进行排序。
    3. 识别高 CPU 使用进程:
      查看顶部的进程列表,找出高负载进程。
  • 调整进程优先级或优化应用配置
    对于高 CPU 使用的进程,可以通过以下方式进行优化:
    • 调整优先级

      sudo renice -n 10 -p 1234
      

      说明: 将 PID 为 1234 的进程优先级设置为 10,降低其 CPU 使用优先级。

    • 优化应用配置
      检查应用程序的配置文件,调整线程数、缓存大小等参数,降低其 CPU 负载。
      示例:
      对于 nginx,可以调整 worker_processes 参数:

      worker_processes auto;
      

      修改配置后,重新加载 nginx

      sudo systemctl reload nginx
      
优化 CPU 使用示例
  • 限制某个进程的 CPU 使用
    使用 cpulimit 工具可以限制进程的 CPU 使用率。
    安装 cpulimit

    sudo apt install cpulimit    # Debian/Ubuntu
    sudo yum install cpulimit    # CentOS/RHEL
    sudo dnf install cpulimit    # Fedora
    

    使用 cpulimit 限制进程 CPU 使用率

    sudo cpulimit -p 1234 -l 50
    

    说明:

    • -p 1234:指定进程 PID。
    • -l 50:限制 CPU 使用率为 50%。
  • 优化多线程应用的 CPU 使用
    对于多线程应用,可以通过调整线程数或负载均衡,避免单个线程占用过多 CPU 资源。
    示例:
    nginx 配置文件中,设置 worker_processes 为系统 CPU 核心数:

    worker_processes auto;
    

    修改配置后,重新加载 nginx

    sudo systemctl reload nginx
    

本节总结

  • 本节主要围绕 Linux 性能监控与优化、系统性能优化、磁盘优化、磁盘优化示例、日志与系统监控工具 展开。
  • 需要重点掌握的命令或工具包括:sarsysstat
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

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