学习目标
- 理解本节涉及的核心主题:系统性能下降、检查系统负载,查看 CPU 和内存使用情况、优化进程优先级,释放不必要的资源、系统无法启动。
- 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:系统性能下降、检查系统负载,查看 CPU 和内存使用情况、优化进程优先级,释放不必要的资源、系统无法启动、软件包安装失败、无法挂载文件系统
- 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
常见问题与解决方案
系统性能下降
系统性能下降可能由于资源过载、配置不当或硬件故障等多种原因导致。及时诊断和优化系统性能,是确保系统稳定运行的关键。
检查系统负载,查看 CPU 和内存使用情况
-
使用
top或htop监控实时资源使用
使用toptop示例输出:
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使用
htopsudo 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 百分比。 分析示例:
- 高
si和so表示交换活动频繁,可能是内存不足。 - 高
wa表示 I/O 等待时间长,可能是磁盘性能瓶颈。 - 高
r表示系统负载较高,可能需要优化进程或增加 CPU。
- procs
-
使用
sar收集历史性能数据
sar是sysstat包中的一个工具,用于收集和报告系统活动信息,包括 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 优先级,减少其对系统资源的占用。
- 较高的 niceness 值(如
-
renice命令
renice用于修改正在运行的进程的优先级。
示例:
将 PID 为1234的进程优先级调整为5:sudo renice -n 5 1234说明:
- 需要具有足够的权限(通常是超级用户)才能降低进程的优先级(设置为更高的 niceness 值)。
-
-
使用
top和htop查找高 CPU 使用进程-
启动
top或htoptop或
htop -
按
%CPU列排序
在top中,按P键按 CPU 使用率排序。
在htop中,按F6键,选择%CPU作为排序依据。 -
识别高 CPU 使用进程
查看顶部列出的进程,找出消耗大量 CPU 的应用程序或服务。
-
-
使用
kill终止不必要的进程
如果某些进程消耗过多资源且不必要,可以终止它们以释放系统资源。sudo kill -9 PID说明:
-9信号强制终止进程,确保其立即停止。- 警告:使用
kill -9可能导致数据丢失,建议优先尝试温和的终止信号(如kill PID或kill -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 菜单中编辑启动项,添加single或init=/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说明:
- 根据硬件品牌和型号选择合适的驱动包。
系统安全问题
系统安全问题可能导致数据泄露、服务中断或系统被恶意控制。及时发现和修复安全漏洞,是保障系统安全的重要措施。
防火墙配置错误
-
检查防火墙状态
使用ufw或iptables查看防火墙规则和状态。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
- 禁止 root 登录
-
重启 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 -
检查特定软件包的安全漏洞
使用apt的policy命令查看软件包的版本和更新状态。apt policy package_name -
使用安全扫描工具
利用工具如Lynis、ClamAV进行系统安全扫描,发现并修复潜在的安全问题。
安装和运行 Lynissudo 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 和内存使用情况、优化进程优先级,释放不必要的资源、系统无法启动、软件包安装失败 展开。
- 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。