三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

树莓派系统资源监控全攻略:从基础命令到实战排查

树莓派系统资源监控全攻略:从基础命令到实战排查

1. 项目概述:为什么需要关注树莓派的系统资源?

如果你正在用树莓派跑一个24小时不间断的服务,比如家庭NAS、智能家居中枢,或者一个自己写的小型Web服务器,有没有那么一瞬间,感觉它突然变“卡”了?网页加载慢了,文件传输像蜗牛,甚至SSH连接都开始有延迟。这时候,你的第一反应是什么?重启大法好?先别急,盲目重启可能让你错过真正的问题所在。

对于树莓派这样的嵌入式设备,资源(CPU、内存、存储、网络)本身就是稀缺品。它不像我们的台式机有几十GB内存和十几个CPU核心可以挥霍。在树莓派上,一个配置不当的服务、一个内存泄漏的脚本,甚至一个异常的日志循环写入,都可能迅速耗尽所有资源,导致系统崩溃。因此,主动监控和查看系统资源,是每一个树莓派玩家从“玩具使用者”进阶到“项目维护者”的必修课。这不仅仅是出了问题才用的“急救包”,更是日常运维、性能调优和预防故障的“听诊器”。

今天,我们就来彻底梳理一下,在树莓派上查看系统资源情况的各种命令。我会从一个运维老手的角度,不仅告诉你命令是什么,更会解释每个命令输出背后的含义,分享在什么场景下该用哪个命令,以及我踩过的一些坑和总结的实用技巧。目标是让你拿到一台树莓派,能像老中医“望闻问切”一样,快速、准确地诊断出它的“健康状况”。

2. 核心监控维度与命令全景图

在深入每个命令之前,我们先建立一个整体的认知框架。监控树莓派,我们主要关心四个核心维度,对应着四条不同的“生命线”:

  1. CPU(中央处理器):计算能力的核心。我们关心它的整体使用率、每个核心的负载、以及是哪些进程在消耗CPU。
  2. 内存(RAM):程序运行的临时工作区。树莓派内存不大(常见1GB、2GB、4GB、8GB),内存不足会直接导致程序崩溃或系统使用交换分区(Swap),严重拖慢速度。
  3. 存储(Disk I/O):包括SD卡或外接SSD/HDD。我们关心剩余空间、读写速度,以及是否有进程在疯狂读写磁盘(这很伤SD卡寿命)。
  4. 网络(Network I/O):对于服务器应用至关重要。需要监控带宽使用情况、连接数等。

针对这些维度,Linux系统提供了从概览到细节、从静态快照到动态监控的一整套工具链。下面这个表格是我整理的一个快速选型指南,你可以先有个全局印象:

监控维度核心命令(静态/快照)核心命令(动态/监控)关键输出解读重点
整体概览uptime,uname -atop,htop系统负载、运行时间、总览进程
CPUlscpu,cat /proc/cpuinfotop,htop,mpstat使用率、负载、每个核心状态
内存free -h,cat /proc/meminfotop,htop总量、已用、缓存、可用、Swap使用
存储df -h,lsblkiotop,iostat挂载点、使用率、剩余空间、读写速率
网络ifconfigip addr,netstatiftop,nethogsIP地址、带宽实时占用、连接状态
进程详情ps auxtop,htop进程ID、资源占用、命令行

注意ifconfig属于net-tools套件,在新版系统中可能默认未安装。更现代且推荐使用的是ip命令(如ip addr show)。但很多教程和用户习惯用ifconfig,所以两者我都会提到。

3. 基础概览命令:快速掌握系统“脉搏”

当你第一次登录树莓派,或者感觉系统有点不对劲时,先用这几个命令快速扫一眼,能获得最基础的健康状态信息。

3.1uptime:系统负载的“第一眼”

这个命令非常简单,就一个单词,但信息量很足。

$ uptime 15:30:45 up 15 days, 3:22, 2 users, load average: 0.08, 0.03, 0.01

我们来拆解一下:

  • 15:30:45:当前系统时间。
  • up 15 days, 3:22:系统已经连续运行了15天3小时22分钟。这是一个重要的稳定性指标。如果一台计划长期运行的树莓派频繁重启(up time很短),可能意味着有硬件或软件问题。
  • 2 users:当前有2个用户登录(通常是你的SSH会话)。
  • load average: 0.08, 0.03, 0.01这是最关键的指标——系统平均负载。它三个数字分别代表过去1分钟、5分钟、15分钟的平均负载。

负载(Load Average)到底是什么?简单理解,它不是CPU使用率的百分比。它表示的是系统中处于可运行状态(正在使用CPU或等待使用CPU)和不可中断状态(正在等待I/O,通常是磁盘I/O)的平均进程数

对于单核CPU(如树莓派 Zero)来说,负载为1.00意味着CPU刚好被完全利用。对于四核CPU(如树莓派 4B)来说,负载为4.00意味着所有核心都处于满负荷状态。

如何解读?

  • 0.08, 0.03, 0.01:非常健康,系统几乎空闲。
  • 2.50, 1.80, 0.90:过去1分钟负载较高(2.5),但长期趋势(15分钟为0.9)在下降,可能刚经历了一个短时任务。
  • 4.50, 4.20, 3.80(在4核CPU上):这是一个危险信号!意味着在过去1分钟、5分钟、15分钟内,平均有超过4个进程在竞争CPU或等待I/O,系统已经持续过载。你需要立即使用top等命令查看是什么进程在搞鬼。

实操心得:我习惯把uptime的输出放在终端提示符(PS1)里,这样每次打开终端都能一眼看到负载和运行时间。对于树莓派4B,如果15分钟负载持续高于3.5,我就会开始警惕并排查。

3.2free:内存使用情况的“体检报告”

树莓派内存小,所以内存监控尤为重要。free命令是查看内存使用情况的首选。

我最常用的参数是-h(human-readable,人类可读格式),它会用G、M等单位显示,直观很多。

$ free -h total used free shared buff/cache available Mem: 3.7Gi 1.2Gi 1.1Gi 123Mi 1.4Gi 2.1Gi Swap: 1.0Gi 0.0Gi 1.0Gi

关键字段解读(重点关注Mem这一行):

  • total:物理内存总量。这台是3.7GB(即4GB版本)。
  • used:已使用的内存。但请注意,这个“已使用”包含了被应用程序和系统缓存(buff/cache)占用的部分,所以光看这个值容易误判。
  • free:完全空闲的内存。这个值通常很小,因为Linux会利用空闲内存做磁盘缓存来提升性能,这是好现象。
  • buff/cache:缓存和缓冲区内存。这部分内存可以被应用程序需要时快速回收。所以它不算“被浪费”。
  • available这是最值得关注的指标!它估算的是可供启动新应用程序而无需交换(Swap)的内存大小。它包含了free的内存和一部分可回收的buff/cache。上例中available有2.1Gi,说明内存非常充裕。
  • Swap:交换分区大小及使用情况。如果used持续大于0,说明物理内存曾不够用,系统动用了硬盘(SD卡)来充当内存,这会导致性能急剧下降。对于树莓派,频繁使用Swap会显著缩短SD卡寿命。

避坑技巧:很多人一看到used很大、free很小就慌了。其实要看available。只要available还有几百MB,系统就远没到内存紧张的地步。真正危险的是available接近0,同时Swapused开始快速增长。

3.3df:磁盘空间的“仓储清单”

树莓派的系统通常运行在SD卡上,空间有限(可能16GB、32GB)。df命令用来查看文件系统的磁盘空间使用情况。

同样,使用-h参数。

$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 29G 5.2G 23G 19% / devtmpfs 1.8G 0 1.8G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.6M 1.9G 1% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock /dev/mmcblk0p1 253M 54M 199M 22% /boot

关键字段解读:

  • Filesystem:磁盘分区。
  • Size, Used, Avail, Use%:总大小、已用、可用、使用百分比。务必定期检查/根目录和/boot分区的使用率
  • Mounted on:挂载点。

为什么/boot分区也很重要?树莓派的/boot分区通常是FAT32格式,独立存放内核、固件和启动配置文件。如果它被日志或旧内核镜像塞满(超过90%),可能导致系统无法更新内核甚至无法启动。定期运行sudo apt autoremove可以清理旧的软件包和内核。

注意事项df默认显示的是磁盘块数,用-h是基本操作。另外,如果你外接了USB硬盘或NAS,这里也会显示出来,方便你查看挂载的存储设备空间。

4. 动态监控神器:tophtop

前面是静态快照,而要实时观察系统资源的变化,尤其是揪出“问题进程”,就需要动态监控工具。top是Linux自带的元老,而htop是其强大的增强版。

4.1 经典之选:top命令详解

直接在终端输入top,你会进入一个全屏的动态监控界面。信息很多,我们聚焦关键区域。

top - 15:45:10 up 15 days, 3:37, 2 users, load average: 0.15, 0.05, 0.01 Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.7 us, 0.7 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st MiB Mem : 3865.8 total, 1153.2 free, 1234.5 used, 1478.1 buff/cache MiB Swap: 1024.0 total, 1024.0 free, 0.0 used. 2385.2 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 789 pi 20 0 720416 98768 63920 S 6.2 2.5 5:23.76 chromium 456 root 20 0 28504 9800 7384 S 1.0 0.2 0:12.34 python3

第一部分:汇总信息(前5行)

  • 第1行:同uptime
  • 第2行(Tasks):进程总数及状态(运行、睡眠、停止、僵尸)。“僵尸进程”如果长期不为0,表示有子进程结束但父进程没有正确回收,可能需要干预。
  • 第3行(%Cpu):CPU状态百分比,这是核心
    • us(user): 用户空间进程占用率。你的应用程序(如Python脚本、Web服务器)消耗的CPU。
    • sy(system): 内核空间占用率。系统调用、中断处理等。
    • id(idle): 空闲率。越高越好。
    • wa(I/O wait):I/O等待百分比。这是关键指标!如果这个值持续很高(比如>10%),说明CPU在大量时间等待磁盘I/O,系统瓶颈在存储(SD卡)速度上。在树莓派上,高wa常意味着SD卡性能不足或某个进程在疯狂写日志。
    • hi/si(hardware/software interrupts):硬件/软件中断处理占用。
    • st(steal):在虚拟化环境中被“偷走”的时间,物理机通常为0。
  • 第4、5行:内存和Swap信息,同free

第二部分:进程列表这是你排查问题的主要区域。默认按CPU使用率(%CPU)降序排序。

  • PID:进程ID。用于后续操作(如kill)。
  • USER:进程所有者。
  • %CPU, %MEM:进程的CPU和内存占用百分比。
  • COMMAND:进程名或命令行。

top的常用交互命令(在top运行时按键):

  • P:按CPU使用率排序(默认)。
  • M:按内存使用率(%MEM)排序。当系统变慢但CPU不高时,按M看看谁吃了最多内存。
  • T:按进程运行时间排序。
  • k:然后输入PID,可以结束(kill)该进程。需谨慎操作!
  • 1:切换显示所有CPU核心的单独使用情况。
  • q:退出top

4.2 进阶之选:htop—— 更强大的可视化监控

htop不是系统自带的,需要安装:sudo apt install htop。安装后,它的界面和交互体验远超top

sudo apt update sudo apt install htop htop

htop的优势:

  1. 彩色界面:不同资源使用率用颜色区分,一目了然。
  2. 横向柱状图:CPU、内存、Swap使用情况用动态柱状图显示,非常直观。
  3. 垂直进程列表:完整显示命令行,更容易识别进程。
  4. 鼠标支持:可以直接点击选择进程、排序。
  5. 快捷操作:F2设置,F3搜索进程名,F4过滤进程,F5树状显示进程关系(非常有用,可以看到父子进程),F9直接发送信号(如kill)给选中的进程。
  6. 轻松管理:用方向键选择进程,按F9选择终止信号(如SIGTERM, SIGKILL),比topk命令更友好。

实操心得:在日常运维中,我几乎完全用htop替代了top。它的树状视图(F5)对于排查由某个父进程派生出的大量子进程导致的问题尤其有效。例如,一个脚本出错可能不断 fork 自身,在htop的树状视图下一目了然。

5. 深度诊断命令:针对I/O与网络的专项工具

top/htop显示wa(I/O等待)很高,或者网络服务异常时,我们需要更专业的工具来定位元凶。

5.1iotop&iostat:揪出磁盘读写“狂魔”

SD卡是树莓派最脆弱的部件之一,频繁的写入会极大缩短其寿命。iotop类似于top,但专门监控磁盘I/O。

安装:sudo apt install iotop

运行需要root权限:sudo iotop

它的界面会显示每个进程的读写速率(磁盘带宽)和读写次数(IOPS)。如果你发现某个进程(比如某个数据库或日志服务)的DISK WRITE速率持续很高,就需要考虑优化它的写入策略,比如将日志写入到内存文件系统(tmpfs)或外接USB硬盘。

iostat则提供更详细的磁盘I/O统计信息,常用于性能分析。安装:sudo apt install sysstat。使用iostat -dx 2可以每2秒刷新一次,查看各磁盘设备的利用率(%util)、读写等待时间(await)等。

5.2iftop&nethogs:看清网络流量去向

如果你的树莓派作为网关、代理或下载服务器,网络带宽可能成为瓶颈。

  • iftop:类似top,实时监控网络接口的带宽使用情况,显示哪些IP地址在和你的树莓派通信,以及流量大小。安装:sudo apt install iftop。运行:sudo iftop -i eth0(监控有线网卡)或sudo iftop -i wlan0(监控无线网卡)。它能帮你快速发现异常的网络连接或流量占用。
  • nethogs:与iftop不同,nethogs进程来分组显示网络流量。当你发现总带宽很高,但不知道是哪个程序在用的时候,nethogs是神器。安装:sudo apt install nethogs。运行:sudo nethogs eth0。它会列出像python3chromium这样的进程及其实时网络吞吐量。

避坑技巧:在调试网络问题时,我通常先用iftop看宏观流量和可疑IP,再用nethogs定位到具体的罪魁祸首进程。注意,这两个工具都需要root权限。

5.3lscpu&/proc文件系统:获取硬件详情

有时候你需要了解更底层的硬件信息。

  • lscpu:以清晰格式显示CPU架构信息,如核心数、线程数、型号、频率、缓存大小等。对于选择软件编译选项或优化配置很有帮助。
  • /proc文件系统:这是一个内核信息的虚拟文件系统。cat /proc/cpuinfo查看CPU详情,cat /proc/meminfo查看比free更详细的内存信息(包含各种内核内存统计)。cat /proc/loadavg直接输出平均负载。

6. 组合拳与自动化监控实践

单个命令就像单个工具,而解决复杂问题需要组合拳。

场景一:系统突然变慢,如何快速定位?

  1. 第一步uptime看负载是否异常。
  2. 第二步htopM键,看是否有进程内存泄漏(内存占用不断增长);按P键看CPU占用;同时观察顶部wa值。
  3. 第三步:如果wa高,开另一个终端,运行sudo iotop看哪个进程在疯狂读写磁盘。
  4. 第四步:如果网络慢,运行sudo nethogs看哪个进程在占用带宽。

场景二:建立简单的自动化监控我们可以写一个简单的Shell脚本,定期(比如每分钟)记录关键指标,用于事后分析或触发警报。

#!/bin/bash # 保存为 monitor.sh LOG_FILE="/var/log/pi_monitor.log" echo "=== $(date) ===" >> $LOG_FILE echo "Uptime & Load:" >> $LOG_FILE uptime >> $LOG_FILE echo "Memory Usage:" >> $LOG_FILE free -h >> $LOG_FILE echo "Disk Usage:" >> $LOG_FILE df -h / /boot >> $LOG_FILE echo "Top 5 Processes by CPU:" >> $LOG_FILE ps aux --sort=-%cpu | head -6 >> $LOG_FILE # head -6 因为第一行是标题 echo "---------------------" >> $LOG_FILE

然后通过crontab设置定时任务:crontab -e,添加一行* * * * * /home/pi/monitor.sh(每分钟执行一次)。这样你就能在/var/log/pi_monitor.log中看到系统随时间的变化趋势。

注意事项:这种日志会不断增长,需要定期清理或使用 logrotate 管理。对于更专业的监控,可以考虑部署 Prometheus + Node Exporter + Grafana 这套组合,能在网页上看到非常炫酷的实时监控图表,但这需要更多的配置资源。

7. 常见问题与排查技巧实录

在实际使用中,你肯定会遇到各种奇怪的现象。这里分享几个我遇到过的典型问题及排查思路。

问题1:树莓派响应变慢,但top显示CPU和内存都不高。

  • 排查思路:立即看top输出的wa(I/O等待)值。如果wa持续在20%以上,甚至50%-70%,瓶颈几乎肯定在磁盘I/O。
  • 进一步行动:打开sudo iotop,观察DISK WRITEDISK READ列。常见元凶:
    • 日志服务:如rsyslogjournald在高速写入日志。检查/var/log目录大小。
    • 数据库:如SQLite、MySQL在没有优化的情况下进行大量写操作。
    • 备份或同步脚本:正在拷贝大量文件。
  • 解决方向:优化日志级别、将日志写入RAM磁盘(tmpfs)、为数据库更换USB SSD、调整备份策略。

问题2:内存available越来越小,但top里没有看到占用特别大的进程。

  • 排查思路:这可能是“内存泄漏”的典型表现。某个进程在缓慢地、持续地申请内存却不释放。
  • 进一步行动:使用htop,按%MEM排序,观察一段时间(比如几分钟),看哪个进程的RES(常驻内存)列在缓慢但稳定地增长。更专业的工具是valgrind,但它在树莓派上运行较慢。
  • 解决方向:重启该进程可以临时解决。长期需要检查该进程的代码(如果是自己写的)或查找该软件已知的内存泄漏Bug和更新。

问题3:网络服务(如Web页面)访问不了,但树莓派本身能ping通。

  • 排查思路:先确认服务进程是否在运行:ps aux | grep [服务名],比如ps aux | grep nginx
  • 进一步行动:如果进程在,检查端口监听:sudo netstat -tlnp | grep :80(查看80端口谁在监听)。检查防火墙:sudo ufw status(如果用了UFW)。用sudo iftop查看是否有流量到达对应端口。
  • 解决方向:可能是服务崩溃、配置错误、端口冲突或防火墙阻止。

问题4:df -h发现/boot分区快满了(Use% > 90%)。

  • 原因:旧内核镜像堆积。每次系统更新内核,旧版本不会自动删除。
  • 解决方法sudo apt autoremove --purge可以清理不再需要的旧内核包。也可以手动删除/boot下形如kernel8.img.old的备份文件(但务必确保当前内核启动正常后再删old文件)。

掌握这些命令和思路,你就能对树莓派的运行状态了如指掌。从被动的“重启试试”,变为主动的“洞察与调优”,这才是玩转树莓派,乃至任何Linux服务器的真正能力。记住,监控不是为了制造焦虑,而是为了建立掌控感。当你熟悉了这些数字背后的含义,你的树莓派项目才会运行得更加稳健和高效。

← 返回列表