学习目标

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

学习重点

  • 主题范围:Linux 性能监控与优化、系统资源监控、查看 CPU 使用率、查看内存使用、磁盘使用、网络带宽监控
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 性能监控与优化

系统资源监控

系统资源监控是了解系统当前状态、发现潜在问题的基础。通过监控 CPU、内存、磁盘和网络等资源的使用情况,可以及时发现资源瓶颈,采取优化措施。

查看 CPU 使用率

CPU 使用率是衡量系统负载的重要指标。高 CPU 使用率可能导致系统响应缓慢甚至崩溃。

使用 tophtop

tophtop 是最常用的实时系统监控工具,用于查看系统的 CPU、内存、进程等使用情况。

  • 实时监控 CPU 使用情况
    top 命令
    top 是一个命令行工具,默认安装在大多数 Linux 发行版中。

    top
    

    htop 命令

    htoptop 的增强版,提供了更友好的用户界面和更多的功能。

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

    比较 top htop

    • top:简洁、基本功能,适合快速查看系统状态。
    • htop:彩色界面、支持鼠标操作、可视化显示,更适合深入分析。
  • 识别高 CPU 使用进程
    tophtop 中,按 %CPU 列排序,可以快速找到消耗 CPU 资源最多的进程。
    示例(使用 top):

    1. 启动 top
      top
      
    2. %CPU 列排序:
      top 界面中,按 P 键可以按 CPU 使用率排序。
    3. 识别高 CPU 使用进程:
      查看顶部列出的进程,找出消耗大量 CPU 的应用程序或服务。 示例(使用 htop):
    4. 启动 htop
      htop
      
    5. %CPU 排序:
      F6 键,选择 %CPU 作为排序依据。
    6. 识别高 CPU 使用进程:
      查看顶部的进程列表,找出高负载进程。
使用 mpstat 查看多核 CPU 性能

mpstatsysstat 包中的一个工具,用于报告各个 CPU 核心的使用情况,适用于多核系统的详细性能分析。

  • 安装与基本用法

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

    启用 sysstat 数据收集:

    sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
    sudo systemctl restart sysstat
    

    查看所有 CPU 核心的使用情况

    mpstat -P ALL 1 5
    

    说明:

    • -P ALL:显示所有 CPU 核心的信息。
    • 1:每隔1秒采样一次。
    • 5:采样5次。
  • 解释 mpstat 输出

    Linux 5.4.0-104-generic (hostname)    04/27/2024  _x86_64_    (8 CPU)
    
    04:00:01 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    04:00:02 PM  all    5.00    0.00    3.00    0.50     0.00    0.00     0.00     0.00     0.00    91.50
    04:00:02 PM    0    6.00    0.00    4.00    0.60     0.00    0.00     0.00     0.00     0.00    89.40
    04:00:02 PM    1    4.00    0.00    2.00    0.40     0.00    0.00     0.00     0.00     0.00    93.60
    ...
    

    字段说明:

    • %usr:用户空间占用的 CPU 百分比。
    • %sys:内核空间占用的 CPU 百分比。
    • %iowait:等待 I/O 操作的 CPU 百分比。
    • %idle:空闲 CPU 百分比。 示例解释:
    • all 行显示所有 CPU 核心的平均使用情况。
    • 每个核心(如 0, 1, ...)的详细使用情况。

查看内存使用

内存使用情况直接影响系统性能。合理的内存管理和监控可以防止内存不足导致的系统缓慢或崩溃。

使用 free 查看内存状态

free 是一个简单的命令,用于显示系统的内存使用情况,包括物理内存、交换空间和缓存。

  • 基本用法

    free
    
  • 常用选项

    • -h:以人类可读的格式显示(如 MB、GB)。
    • -m:以 MB 为单位显示。
    • -g:以 GB 为单位显示。 示例:
    free -h
    

    示例输出:

                  total        used        free      shared  buff/cache   available
    Mem:           16G        4.2G        2.1G        512M        9.7G         11G
    Swap:          8G          0B          8G
    
  • 理解内存使用的各个部分

    • total:总物理内存。
    • used:已使用的内存。
    • free:空闲的内存。
    • shared:多个进程共享使用的内存。
    • buff/cache:用于缓冲和缓存的内存。
    • available:可供新进程使用的内存。 注意事项:
    • buff/cache 中的内存可被回收利用,available 更能准确反映系统实际可用内存。
使用 vmstat 分析内存与交换空间

vmstat(Virtual Memory Statistics)提供了系统内存、进程、分页、块 I/O 等的统计信息,适用于深入分析内存和交换空间的使用情况。

  • 基本用法

    vmstat
    
  • 常用选项

    • -s:以统计摘要形式显示信息。
    • -m:显示 slab 信息。
    • 1 5:每隔1秒采样一次,共5次。 示例:
    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 百分比。 解释 vmstat 输出
    • siso 表示交换活动频繁,可能是内存不足。
    • wa 表示 I/O 等待时间长,可能是磁盘性能瓶颈。
    • r 表示系统负载较高,可能需要优化进程或增加 CPU。
使用 top 监控内存使用

top 不仅可以监控 CPU 使用情况,还能实时显示内存和交换空间的使用情况,帮助识别内存泄漏和高内存使用的进程。

  • 查看内存使用情况
    启动 top

    top
    

    内存部分示例输出:

    KiB Mem : 16384000 total,  2100000 free, 4200000 used, 10084000 buff/cache
    KiB Swap:  8388608 total,  8388608 free,        0 used.  10400000 avail Mem
    
  • 识别内存泄漏进程

    1. 排序进程按内存使用量
      top 界面中,按 M 键可以按内存使用量排序。
    2. 监控高内存使用进程
      观察持续占用大量内存的进程,确认是否存在内存泄漏。 示例:
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1234 alice     20   0  500000 300000  20000 S   5.0  1.8  10:00.00 myapp
    

    在此示例中,myapp 进程占用了 1.8% 的内存,持续监控其内存使用是否异常增长。

磁盘使用

磁盘使用情况影响系统的存储能力和读写性能。通过监控磁盘空间和 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 进程正在进行大量磁盘写入操作。

网络带宽监控

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

使用 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):从网络接收的流量。

系统性能优化

性能优化旨在通过调整系统配置和优化资源使用,提升系统整体性能和响应速度。

优化 CPU 使用

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

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

    nice -n 10 myapp
    
  • 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 使用率异常高的进程。
  • 调整进程优先级或优化应用配置
    对于高 CPU 使用的进程,可以通过以下方式进行优化:
    • 调整优先级

      sudo renice -n 10 -p 1234
      

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

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

      worker_processes auto;
      

      修改配置后,重新加载 nginx

      sudo systemctl reload nginx
      

内存优化

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

调整内核参数,使用 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
    

    增加交换空间

    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 中移除对应行
管理缓存与交换空间最佳实践
  • 设置合理的 vm.swappiness :根据系统需求调整 vm.swappiness,降低系统对交换空间的依赖,提高物理内存的利用效率。
  • 监控交换空间使用情况:定期检查交换空间的使用,确保系统在物理内存不足时能够有效利用交换空间。
  • 避免过度依赖交换空间:通过增加物理内存或优化应用程序,减少对交换空间的需求。

本节总结

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

复习建议

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