学习目标

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

学习重点

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

常见问题与解决方案

系统性能下降

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

检查系统负载,查看 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 缓存。 注意事项:
    • 清理缓存后,系统性能可能暂时下降,因为需要重新加载被清理的缓存。

其他常见问题与解决方案

除了上述问题,系统管理员还可能遇到其他常见问题。以下是一些补充的常见问题及其解决方案。

系统无法启动

  • 检查启动日志
    使用 journalctl 查看系统启动过程中的日志,定位启动失败的原因。

    sudo journalctl -b -1
    

    说明:

    • -b -1 选项查看上一次启动的日志。
  • 进入单用户模式
    在 GRUB 菜单中编辑启动项,添加 singleinit=/bin/bash,进入单用户模式进行故障排查和修复。

  • 修复文件系统
    如果启动失败是由于文件系统错误,可以使用 fsck 检查和修复文件系统。

    sudo fsck -y /dev/sda1
    
  • 重新安装引导加载器
    如果引导加载器损坏,可以使用 Live CD/USB 启动系统,重新安装 GRUB。

    sudo grub-install /dev/sda
    sudo update-grub
    

软件包安装失败

  • 更新包列表
    有时包列表过期会导致安装失败,使用以下命令更新包列表。

    sudo apt update
    
  • 修复损坏的依赖
    使用以下命令尝试修复损坏的依赖关系。

    sudo apt --fix-broken install
    
  • 清理包缓存
    清理本地包缓存,避免缓存损坏导致安装失败。

    sudo apt clean
    
  • 更换软件源
    如果软件源不可用或速度较慢,可以更换为其他软件源。

    sudo nano /etc/apt/sources.list
    

    示例内容:

    deb http://archive.ubuntu.com/ubuntu/ focal main restricted
    deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted
    deb http://archive.ubuntu.com/ubuntu/ focal universe
    deb http://archive.ubuntu.com/ubuntu/ focal-updates universe
    deb http://archive.ubuntu.com/ubuntu/ focal multiverse
    deb http://archive.ubuntu.com/ubuntu/ focal-updates multiverse
    deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
    deb http://security.ubuntu.com/ubuntu focal-security main restricted
    deb http://security.ubuntu.com/ubuntu focal-security universe
    deb http://security.ubuntu.com/ubuntu focal-security multiverse
    

    保存并退出,然后重新更新包列表:

    sudo apt update
    

无法挂载文件系统

  • 检查文件系统类型
    确保使用正确的文件系统类型挂载设备。
    sudo blkid /dev/sda1
    
  • 创建挂载点
    如果挂载点目录不存在,先创建它。
    sudo mkdir -p /mnt/my_mount
    
  • 挂载文件系统
    使用正确的选项挂载文件系统。
    sudo mount -t ext4 /dev/sda1 /mnt/my_mount
    
  • 查看挂载状态
    mount | grep /mnt/my_mount
    
  • 修复文件系统
    如果挂载失败是由于文件系统错误,可以使用 fsck 检查和修复文件系统。
    sudo fsck -y /dev/sda1
    

权限问题

  • 查看文件权限
    使用 ls -l 查看文件或目录的权限设置。

    ls -l /path/to/file
    

    示例输出:

    -rw-r--r-- 1 user user 1234 Apr 27 12:34 /path/to/file
    
  • 更改文件权限
    使用 chmod 命令更改文件或目录的权限。
    示例:
    将文件权限设置为所有用户可读写:

    sudo chmod 666 /path/to/file
    
  • 更改文件所有者和群组
    使用 chown 命令更改文件或目录的所有者和群组。
    示例:
    将文件所有者更改为 alice,群组更改为 developers

    sudo chown alice:developers /path/to/file
    
  • 使用 sudo 运行需要权限的命令
    如果当前用户权限不足,可以使用 sudo 提升权限运行命令。

    sudo command_name
    

    示例:

    使用 sudo 安装软件包:

    sudo apt install package_name
    

设备驱动问题

  • 查看已加载的驱动模块
    使用 lsmod 命令查看当前加载的内核模块。

    lsmod
    
  • 加载缺失的驱动模块
    使用 modprobe 命令加载所需的驱动模块。

    sudo modprobe module_name
    

    示例:

    加载 rtl8192cu 无线网卡驱动模块:

    sudo modprobe rtl8192cu
    
  • 查看驱动模块的日志
    使用 dmesg 查看与驱动相关的内核日志。

    dmesg | grep module_name
    

    示例:

    查看 rtl8192cu 驱动日志:

    dmesg | grep rtl8192cu
    
  • 安装或更新驱动
    如果驱动模块缺失或版本过旧,可以从官方渠道下载并安装最新驱动,或使用包管理工具安装驱动包。

    sudo apt install firmware-realtek
    

    说明:

    • 根据硬件品牌和型号选择合适的驱动包。

系统安全问题

系统安全问题可能导致数据泄露、服务中断或系统被恶意控制。及时发现和修复安全漏洞,是保障系统安全的重要措施。

防火墙配置错误

  • 检查防火墙状态
    使用 ufwiptables 查看防火墙规则和状态。

    sudo ufw status verbose
    

    sudo iptables -L -v -n
    
  • 调整防火墙规则
    根据实际需求,添加、修改或删除防火墙规则。
    使用 ufw

    • 允许特定端口
      sudo ufw allow 22/tcp    # 允许 SSH
      sudo ufw allow 80/tcp    # 允许 HTTP
      sudo ufw allow 443/tcp   # 允许 HTTPS
      
    • 拒绝特定端口
      sudo ufw deny 23/tcp     # 拒绝 Telnet
      
    • 删除防火墙规则
      sudo ufw delete allow 23/tcp
      

    使用 iptables

    • 允许特定端口
      sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
      sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
      
    • 拒绝特定端口
      sudo iptables -A INPUT -p tcp --dport 23 -j DROP
      
    • 保存防火墙规则
      sudo iptables-save | sudo tee /etc/iptables/rules.v4
      
  • 重启防火墙服务

    sudo systemctl restart ufw
    

    sudo systemctl restart iptables
    

SSH 配置问题

  • 确保 SSH 服务正在运行

    sudo systemctl status ssh
    
  • 检查 SSH 配置文件(/etc/ssh/sshd_config

    sudo nano /etc/ssh/sshd_config
    

    常见配置项:

    • 禁止 root 登录
      PermitRootLogin no
      
    • 禁用密码认证,启用密钥认证
      PasswordAuthentication no
      PubkeyAuthentication yes
      
    • 限制允许登录的用户
      AllowUsers alice bob
      
  • 重启 SSH 服务

    sudo systemctl restart ssh
    
  • 检查防火墙规则是否允许 SSH 端口

    sudo ufw allow 22/tcp
    

软件包漏洞与更新

  • 定期更新系统软件包
    使用包管理工具定期更新系统软件包,修复已知的安全漏洞。

    sudo apt update
    sudo apt upgrade
    
  • 使用 unattended-upgrades 自动安装安全更新

    sudo apt install unattended-upgrades
    sudo dpkg-reconfigure --priority=low unattended-upgrades
    
  • 检查特定软件包的安全漏洞
    使用 aptpolicy 命令查看软件包的版本和更新状态。

    apt policy package_name
    
  • 使用安全扫描工具
    利用工具如 LynisClamAV 进行系统安全扫描,发现并修复潜在的安全问题。
    安装和运行 Lynis

    sudo apt install lynis
    sudo lynis audit system
    

    安装和运行 ClamAV

    sudo apt install clamav
    sudo freshclam
    sudo clamscan -r /home
    

总结

在高级 Linux 管理中,内核管理、虚拟化技术以及高可用性与负载均衡的配置与管理是关键组成部分。通过掌握这些高级管理技能,系统管理员可以优化系统性能、提升资源利用率、确保服务的高可用性,并应对复杂的业务需求和技术挑战。同时,熟悉常见问题与解决方案,可以帮助管理员快速定位和解决系统运行中的各种问题,确保系统的稳定性和可靠性。

以下是基于具体实例的应用总结:

  • 查看内核版本并验证自定义内核

    uname -r
    cat /proc/version
    
  • 编译并安装自定义内核

    git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
    cd linux
    make menuconfig
    make -j$(nproc)
    sudo make modules_install
    sudo make install
    sudo update-grub
    sudo reboot
    
  • 使用 rsync 进行定期文件备份
    创建一个每日备份脚本 backup_documents.sh

    #!/bin/bash
    
    SOURCE="/home/user/documents/"
    DESTINATION="user@backup.example.com:/backup/documents_backup/"
    LOGFILE="/var/log/rsync_backup.log"
    
    rsync -avz --delete -e ssh "$SOURCE" "$DESTINATION" >> "$LOGFILE" 2>&1
    
    echo "Backup completed on $(date)" >> "$LOGFILE"
    

    设置 cron 任务每天凌晨2点执行备份:

    crontab -e
    

    添加以下行:

    0 2 * * * /path/to/backup_documents.sh
    
  • 使用 tar 创建和恢复压缩归档
    创建备份归档:

    tar -czvf /backup/documents_backup_2024-04-27.tar.gz /home/user/documents/
    

    恢复备份归档:

    tar -xzvf /backup/documents_backup_2024-04-27.tar.gz -C /home/user/restored_documents/
    
  • 使用 dd 创建和恢复全盘镜像
    创建全盘镜像:

    sudo dd if=/dev/sda of=/backup/sda_backup_2024-04-27.img bs=4M status=progress
    sudo sync
    

    恢复全盘镜像:

    sudo dd if=/backup/sda_backup_2024-04-27.img of=/dev/sda bs=4M status=progress
    sudo sync
    
  • 使用 extundelete 恢复被删除的文件
    恢复 /home/user/documents/file.txt

    sudo umount /dev/sda1
    sudo extundelete /dev/sda1 --restore-file /home/user/documents/file.txt
    ls RECOVERED_FILES/home/user/documents/
    
  • 使用 testdisk 恢复丢失的分区
    恢复丢失的分区表:

    sudo testdisk
    # 按照界面指引选择磁盘、分区表类型,执行分区恢复操作
    
  • 使用 fsck 检查并修复文件系统
    检查并修复 /dev/sda1

    sudo umount /dev/sda1
    sudo fsck -y /dev/sda1
    sudo mount /dev/sda1 /mnt
    
  • 安装并配置 collectd Grafana 进行性能监控

    sudo apt install collectd influxdb grafana
    sudo systemctl enable collectd influxdb grafana-server
    sudo systemctl start collectd influxdb grafana-server
    

    配置 collectd 发送数据到 InfluxDB,并在 Grafana 中创建性能监控仪表盘。

  • 配置自动化报警规则
    创建一个脚本监控 CPU 使用率,并在超过阈值时发送报警邮件:

    sudo crontab -e
    # 添加以下行,每5分钟运行一次监控脚本
    */5 * * * * /usr/local/bin/cpu_alert.sh
    

本节总结

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

复习建议

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