Ubuntu蓝牙栈扫描BLE设备时内存/存储占用过高问题如何排查?
调试定位步骤
- 排查被进程持有未释放的已删除文件:这类文件不会被du统计到,但会计入df的占用,完全匹配你停止扫描后进程释放句柄才会归还空间的特征,执行命令:
如果有返回结果,确认是bluetoothd服务持有了未释放的临时文件即可定位根因。lsof | grep '(deleted)' | grep bluetooth - 对比扫描前后的目录大小变化:执行
sync同步文件系统统计后,用ncdu /分别在扫描启动前、运行5分钟后扫描根目录,重点核对两个路径的大小变化:/var/log/:系统日志、蓝牙服务日志的默认存储路径/var/lib/bluetooth/:BlueZ蓝牙栈的设备缓存、配对信息存储路径
- 检查系统日志写入量:执行
journalctl --disk-usage查看journald日志的总占用,开启扫描后再执行一次对比,如果占用增长明显,执行journalctl -f实时观察是否有大量蓝牙相关的调试/报错日志持续输出。
对应解决方案
- 临时释放空间:不需要等待数小时或者重启整机,直接重启蓝牙服务即可释放被bluetoothd持有的所有缓存、临时文件:
systemctl restart bluetooth - 日志过量写入修复:如果确认是journald日志过量占用,先执行
journalctl --vacuum-size=100M清理历史日志,再修改/etc/systemd/journald.conf配置,添加/修改以下参数限制日志最大占用:
保存后执行SystemMaxUse=100M SystemMaxFileSize=20Msystemctl restart systemd-journald生效。 - 蓝牙缓存过量清理:如果是扫描到大量BLE设备导致BlueZ缓存持续增长,不需要保留配对信息的前提下可以直接清空缓存目录:
systemctl stop bluetooth && rm -rf /var/lib/bluetooth/* && systemctl start bluetooth - 固件bug修复:Jetson TX2官方提供的4.9内核配套的Intel 8265蓝牙固件存在已知的扫描缓存泄露问题,可下载最新的
ibt-12-16.sfi固件文件替换/lib/firmware/下的旧版本,重启设备后生效。
内容的提问来源于stack exchange,提问作者simonsc
相关产品推荐
相关产品推荐

