学习目标

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

学习重点

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

Linux 性能监控与优化

系统性能优化

内存优化

内存优化通过调整系统参数和管理缓存与交换空间,提升内存使用效率,防止内存不足导致的性能问题。

调整内核参数,使用 sysctl

sysctl 是一个用于查看和修改内核参数的工具,内核参数通常保存在 /etc/sysctl.conf/etc/sysctl.d/ 目录下的文件中。

  • 常用内核参数
    • vm.swappiness
      控制系统使用交换空间的倾向。范围从 0(尽量少使用交换空间)到 100(尽量多使用交换空间)。
      默认值: 60
      优化建议:vm.swappiness 设置为 10,减少交换空间的使用,提高系统性能。
      临时调整:

      sudo sysctl vm.swappiness=10
      

      永久调整:

      编辑 /etc/sysctl.conf 文件,添加以下行:

      vm.swappiness=10
      

      应用更改:

      sudo sysctl -p
      
    • vm.vfs_cache_pressure
      控制系统回收目录和 inode 缓存的倾向。默认值为 100,增大该值会加快缓存回收速度,减小则会保留更多缓存。
      优化建议:vm.vfs_cache_pressure 设置为 50,保持更多的文件系统缓存,提升文件访问性能。
      临时调整:

      sudo sysctl vm.vfs_cache_pressure=50
      

      永久调整:

      编辑 /etc/sysctl.conf 文件,添加以下行:

      vm.vfs_cache_pressure=50
      

      应用更改:

      sudo sysctl -p
      
  • 临时与永久调整方法
    • 临时调整:通过 sysctl 命令直接修改内核参数,重启后失效。
    • 永久调整:编辑 /etc/sysctl.conf/etc/sysctl.d/*.conf 文件,确保参数在系统重启后仍然生效。
管理缓存与交换空间
  • 清理缓存
    清理系统缓存可以释放内存,但通常不建议频繁执行,因为缓存有助于提高系统性能。只有在特定情况下(如内存不足)才需要清理缓存。
    命令:

    sudo sync
    sudo sysctl -w vm.drop_caches=3
    

    说明:

    • vm.drop_caches=3:清理页缓存、目录项缓存和 inode 缓存。 注意事项:
    • 清理缓存后,系统性能可能暂时下降,因为需要重新加载被清理的缓存。
  • 调整交换空间大小
    交换空间(Swap)用于在物理内存不足时临时存储数据。合理配置交换空间可以防止系统因内存不足而崩溃。

    • 查看当前交换空间使用情况

      swapon --show
      

      示例输出:

      NAME      TYPE      SIZE   USED PRIO
      /swapfile file      4G     0B    -2
      
    • 增加交换空间

      1. 创建交换文件

        sudo fallocate -l 4G /swapfile
        

        说明: 创建一个 4GB 的交换文件。

      2. 设置正确的权限

        sudo chmod 600 /swapfile
        
      3. 格式化为交换空间

        sudo mkswap /swapfile
        
      4. 启用交换空间

        sudo swapon /swapfile
        
      5. 将交换空间添加到 /etc/fstab 文件中以便开机自动启用

        /swapfile none swap sw 0 0
        
    • 减少交换空间

      1. 禁用交换文件
        sudo swapoff /swapfile
        
      2. 删除交换文件
        sudo rm /swapfile
        
      3. /etc/fstab 中移除对应行 管理交换空间最佳实践
    • 设置合理的交换空间大小:根据系统内存大小和应用需求,设置合适的交换空间大小。常见建议是物理内存的 1-2 倍。

    • 监控交换空间使用情况:通过 freevmstat 等工具,定期检查交换空间的使用情况,确保系统在内存不足时能够有效利用交换空间。

    • 避免过度依赖交换空间:通过增加物理内存或优化应用程序,减少对交换空间的需求,提升系统性能。

磁盘优化

磁盘优化通过调整文件系统、管理分区和优化 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
        
磁盘优化最佳实践
  • 合理规划分区和文件系统类型:根据系统用途选择合适的分区布局和文件系统类型,以优化性能和数据安全。
  • 使用适当的挂载选项:如 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     %usr     %nice   %sys %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 输出
    字段说明:

    • %usr:用户空间占用的 CPU 百分比。
    • %sys:内核空间占用的 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 可以了解系统缓存的使用情况,有助于优化文件系统性能。

使用 collectd 等工具进行性能监控

除了 sysstat 包中的工具,其他专业的性能监控工具如 collectdMuninNagiosZabbix 也广泛用于系统性能监控和分析。

collectd - 系统性能监控工具

collectd 是一个开源的系统统计收集守护进程,可以收集系统和应用程序的性能指标,并将其存储或发送到集中监控系统进行分析和可视化。

  • 安装与配置
    安装 collectd

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

    配置 collectd

    编辑 /etc/collectd/collectd.conf 文件,启用和配置所需的插件。

    示例:

    LoadPlugin cpu
    LoadPlugin memory
    LoadPlugin disk
    LoadPlugin network
    
    <Plugin "cpu">
      ReportByCpu true
      ReportByState true
    </Plugin>
    
    <Plugin "memory">
      # 默认配置
    </Plugin>
    
    <Plugin "disk">
      Disk "/dev/sda"
      Disk "/dev/sdb"
    </Plugin>
    
    <Plugin "network">
      Interface "eth0"
    </Plugin>
    

    启动并启用 collectd 服务

    sudo systemctl enable collectd
    sudo systemctl start collectd
    
  • 收集系统指标(CPU, 内存, 磁盘, 网络)
    collectd 可以通过加载不同的插件,收集各种系统指标,并将其存储到本地文件、数据库或发送到远程监控系统。
    常用插件:

    • CPU:收集 CPU 使用率、负载等信息。
    • Memory:收集内存使用情况。
    • Disk:收集磁盘使用和 I/O 信息。
    • Network:收集网络流量和连接信息。
    • Load:收集系统负载信息。
  • 集成与可视化工具(如 Grafana)
    collectd 可以与 Grafana 等可视化工具集成,通过数据库(如 InfluxDB、Prometheus)存储数据,并在 Grafana 中创建实时监控面板。
    示例:将 collectd 数据发送到 InfluxDB 并在 Grafana 中可视化

    1. 安装 InfluxDB 和 Grafana

      sudo apt install influxdb grafana    # Debian/Ubuntu
      sudo yum install influxdb grafana    # CentOS/RHEL
      sudo dnf install influxdb grafana    # Fedora
      
    2. 启动并启用 InfluxDB 和 Grafana 服务

      sudo systemctl enable influxdb
      sudo systemctl start influxdb
      
      sudo systemctl enable grafana-server
      sudo systemctl start grafana-server
      
    3. 配置 collectd 发送数据到 InfluxDB
      编辑 /etc/collectd/collectd.conf,添加 write_influxdb 插件配置:

      LoadPlugin write_influxdb
      
      <Plugin "write_influxdb">
        <Node "influxdb">
          Host "localhost"
          Port "8086"
          Database "collectd"
          StoreRates true
        </Node>
      </Plugin>
      

      重新启动 collectd 服务:

      sudo systemctl restart collectd
      
    4. 在 Grafana 中添加 InfluxDB 数据源

      • 访问 Grafana 界面(默认端口 3000):http://your_server_ip:3000
      • 登录(默认用户名和密码均为 admin)。
      • 添加 InfluxDB 数据源,填写相应信息。
    5. 创建 Grafana 仪表盘

      • 使用预定义的模板或自定义创建仪表盘,展示系统性能指标。
其他监控工具

除了 collectd,还有其他流行的监控工具,如 MuninNagiosZabbix,它们提供了丰富的功能和插件,适用于不同规模和需求的系统监控。

  • Munin
    Munin 是一个网络监控工具,使用简单,适合小型和中型系统。它通过插件收集数据,并生成图形化的网页展示系统性能指标。
    安装与配置

    sudo apt install munin munin-node    # Debian/Ubuntu
    sudo yum install munin munin-node    # CentOS/RHEL
    sudo dnf install munin munin-node    # Fedora
    

    启动并启用服务

    sudo systemctl enable munin-node
    sudo systemctl start munin-node
    

    访问 Munin 网页界面

    默认情况下,Munin 的网页界面位于 http://your_server_ip/munin,需要在 Web 服务器(如 Apache、Nginx)中配置相应的虚拟主机。

  • Nagios
    Nagios 是一个功能强大的企业级监控系统,支持广泛的插件和扩展,适用于大规模和复杂的系统监控。
    安装与配置
    Nagios 的安装和配置较为复杂,涉及服务器端和客户端的设置。建议参考官方文档或相关教程进行安装和配置。
    主要特点:

    • 实时监控系统和网络服务。
    • 支持自定义报警和通知。
    • 丰富的插件生态系统。
  • Zabbix
    Zabbix 是一个开源的企业级监控解决方案,提供全面的系统和应用程序监控功能,支持分布式监控和高可用性配置。
    安装与配置
    Zabbix 包括服务器、代理和前端组件,安装过程涉及多个步骤。建议参考官方文档或相关教程进行安装和配置。
    主要特点:

    • 实时监控和历史数据存储。
    • 灵活的报警和通知机制。
    • 强大的数据可视化和报表功能。
监控工具选择建议
  • 小型系统Munin 提供了简单易用的监控功能,适合快速部署和基本的性能监控。
  • 中型企业collectd 配合 Grafana 是一个灵活且强大的组合,适用于定制化监控需求。
  • 大型企业NagiosZabbix 提供了全面的监控功能和扩展性,适合复杂和分布式环境。

本节总结

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

复习建议

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