性能优化技巧¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
可用性能工具¶
工具 |
用途 |
示例命令 |
|---|---|---|
|
查看进程、CPU、内存实时占用 |
|
|
按 CPU 或内存排序查看进程 |
|
|
查看运行时间与系统负载 |
|
|
查看整体 CPU 利用率 |
|
|
查看 CPU、内存、swap、I/O 粗略状态 |
|
|
查看内存与 swap 使用情况 |
|
|
查看块设备 I/O 统计 |
|
|
查看文件系统空间占用 |
|
|
查看目录占用 |
|
|
查看 CPU 架构与频率信息 |
|
|
查看块设备和挂载关系 |
|
|
查看内核参数 |
|
|
查看服务状态 |
|
|
查看服务或系统日志 |
|
|
基础网络连通性测试 |
|
系统性能监控¶
查看整体负载¶
先用 uptime 查看系统运行时间和 load average:
adb shell 'uptime'
示例输出中包含 load average。如果 load average 长时间明显高于 CPU 核数,需要进一步查看 CPU、I/O 或进程占用。
查看进程 CPU 与内存占用¶
使用 top 查看当前系统进程、CPU、内存概况:
adb shell 'top -b -n 1 | head -20'
如果要快速定位 CPU 占用较高的进程,可以使用:
adb shell 'ps -eo pid,ppid,comm,%cpu,%mem,args --sort=-%cpu | head -12'
如果要按内存占用排序,可以使用:
adb shell 'ps -eo pid,ppid,comm,%cpu,%mem,args --sort=-%mem | head -12'
查看 CPU 使用率¶
mpstat 可用于观察 CPU 的用户态、内核态、I/O 等待和空闲比例:
adb shell 'mpstat 1 2'
本次实测中,mpstat 可正常运行,示例平均空闲比例约 92% 以上,说明测试时系统整体 CPU 压力不高。
查看 CPU 频率和调度策略¶
当前开发板 CPU0-7 均在线,可通过以下命令查看:
adb shell 'cat /sys/devices/system/cpu/online'
查看当前 CPU governor:
adb shell 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -e "$f" ] && printf "%s=" "$f" && cat "$f"; done'
CPU0-7 的 governor 均为 performance。可用 governor 包含 userspace、ondemand、walt、conservative、powersave、performance、schedutil。
查看当前频率:
adb shell 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq; do [ -e "$f" ] && printf "%s=" "$f" && cat "$f"; done'
本次实测中,CPU0-3 当前约为 1804800 kHz,CPU4-7 当前约为 2016000 kHz。
内存与 Swap 监控¶
查看内存使用情况¶
使用 free 查看内存、cache 和 swap 使用情况:
adb shell 'free -h'
本次实测中,系统总内存约 3.5 GiB,available 约 2.4 GiB,swap 约 1.8 GiB 且未明显使用。
查看 vmstat¶
vmstat 可以快速观察运行队列、内存、swap、I/O 和 CPU 使用情况:
adb shell 'vmstat 1 2'
重点关注:
r:运行队列,持续偏高时说明 CPU 可能繁忙。si/so:swap in/out,持续非零说明内存压力较大。wa:I/O wait,持续偏高说明存储 I/O 可能成为瓶颈。id:CPU idle,持续较低说明 CPU 利用率较高。
查看 zram swap¶
当前系统使用 /dev/zram0 作为 swap,可通过以下命令查看:
adb shell 'cat /proc/swaps; zramctl 2>/dev/null || true'
本次实测中,/dev/zram0 大小约 1.8 GiB,优先级为 32758,当前几乎未使用。
存储 I/O 与空间检查¶
查看文件系统空间¶
使用 df 查看各挂载点空间占用:
adb shell 'df -h'
本次实测中,根文件系统 / 约 7.8 GiB,已使用约 4.1 GiB;/data 约 40 GiB,剩余空间较充足。较大的日志、测试文件和临时数据建议优先放到 /data 或 /tmp,避免占满根文件系统。
查看目录占用¶
需要定位大文件或大目录时,可以使用:
adb shell 'du -sh /data/* 2>/dev/null | sort -h | tail -20'
如果排查根文件系统空间,可改为检查 /var、/usr、/opt 等目录。
查看块设备¶
使用 lsblk 查看块设备、分区和挂载点:
adb shell 'lsblk'
当前设备主存储为 mmcblk0,系统分区、缓存分区、数据分区均挂载在该块设备的不同分区上。
查看 I/O 统计¶
当前开发板上的 iostat 为 BusyBox 版本,不支持 -x 扩展参数。可使用以下命令查看基础块设备 I/O:
adb shell 'iostat -d -k 1 2'
如果需要观察 CPU 与 I/O 的组合状态,可结合 vmstat 1 2 一起查看。
网络状态检查¶
当前开发板可使用 ip 和 ping 做基础网络检查:
adb shell 'ip -br addr; ip route'
本次实测中,wlan0 和 p2p0 处于 DOWN 状态,未看到默认路由。因此当前不适合写入外网吞吐或网络带宽测试流程。
本地回环连通性可用以下命令验证:
adb shell 'ping -c 3 -W 1 127.0.0.1'
本次实测中,回环地址 ping 测试 0% 丢包,可用于确认基础网络栈工作正常。
服务与日志排查¶
查看失败服务¶
服务异常会影响启动速度、后台资源占用和功能稳定性。可以先查看失败服务:
adb shell 'systemctl --failed --no-pager'
本次实测中存在若干 failed 服务,例如 camera_cgroup.service、lefbe.service、pulseaudio.service、qwesd.service、thermal-engine.service 等。具体是否需要优化或关闭,应结合对应功能需求判断。
查看错误日志¶
查看最近的错误日志:
adb shell 'journalctl -p err -n 50 --no-pager'
如需查看某个服务的日志,可使用:
adb shell 'journalctl -u 服务名 --no-pager -n 100'
排查服务类性能问题时,建议先确认服务是否反复重启、阻塞启动或持续打印错误日志。
内核参数查看¶
当前系统可用 sysctl 查看部分内核参数:
adb shell 'sysctl kernel.kptr_restrict kernel.perf_event_paranoid vm.swappiness vm.dirty_ratio vm.dirty_background_ratio net.core.rmem_max net.core.wmem_max'
本次实测值包括:
kernel.kptr_restrict = 2kernel.perf_event_paranoid = 2vm.swappiness = 100vm.dirty_ratio = 20vm.dirty_background_ratio = 10net.core.rmem_max = 1048576net.core.wmem_max = 1048576
修改内核参数会影响系统行为,正式修改前应结合具体问题评估,并保留原始值以便回退。
进程优先级和 CPU 亲和性¶
当前系统可使用 nice、renice、ionice、taskset。这些工具适合在调试阶段临时调整进程优先级或 CPU 亲和性。
查看命令是否存在¶
adb shell 'command -v taskset; command -v nice; command -v renice; command -v ionice'
示例:指定 CPU 运行命令¶
adb shell 'taskset -c 0-3 命令'
示例:调整进程优先级¶
adb shell 'renice -n 5 -p 进程PID'
这些命令会改变进程调度行为,建议只在明确知道目标进程和测试目的时使用。
温度状态查看¶
可以通过 thermal sysfs 查看各温区温度:
adb shell 'for z in /sys/class/thermal/thermal_zone*; do [ -e "$z/type" ] && printf "%s " "$(cat "$z/type")" && cat "$z/temp" 2>/dev/null; done | head -40'
本次实测中可读取到 cpu-1-0、cpu-1-1、cpu-1-2、gpu、wlan、video 等温区。温度值通常以毫摄氏度显示,例如 50800 表示约 50.8°C。
优化排查流程¶
先执行
uptime和top -b -n 1,判断系统是否整体繁忙。如果 CPU 高,使用
ps --sort=-%cpu和mpstat定位进程与 CPU 使用率。如果内存紧张,使用
free -h、vmstat 1 2和cat /proc/swaps查看 available、swap 和 zram 状态。如果系统卡顿但 CPU 不高,使用
vmstat和iostat -d -k 1 2判断是否存在 I/O 等待或存储访问压力。如果启动慢或后台异常,使用
systemctl --failed和journalctl -p err查看失败服务和错误日志。如果怀疑过热降频,查看
scaling_cur_freq、scaling_governor和 thermal zone 温度。如果涉及网络问题,先确认
ip -br addr和ip route,再进行连通性测试。
注意事项¶
本文只保留当前开发板实测可用的工具和命令。
当前系统未纳入
perf、htop、sar、pidstat、stress-ng、sysbench等工具流程。当前
iperf3命令存在依赖库缺失问题,不纳入本文网络吞吐测试流程。涉及 governor、sysctl、renice、ionice、服务启停等操作时,应先明确测试目的并记录修改前状态。
正式优化建议一次只改一个变量,修改前后分别记录
top、vmstat、mpstat、iostat、journalctl等结果,避免无法判断是哪项修改产生影响。
总结¶
当前开发板可以使用基础 Linux 工具完成 CPU、内存、存储、服务、日志、温度和基础网络状态排查。建议性能优化时先用只读命令确认瓶颈来源,再按 CPU、内存、I/O、服务、日志和温度方向逐项收敛。对于当前系统暂不可用或依赖不完整的工具,不应直接写入常规操作流程。