Ubuntu 20.04使用snaps时snapd突然占满全部可用内存导致系统冻结的排障咨询
同类问题共性说明
- 该故障是Ubuntu 20.04 LTS版本下snapd服务的已知高发问题,普遍出现在总内存4G及以下、snapd运行版本在2.55~2.62分支的设备上,大量用户反馈过snapd无上限持续占满物理内存、进程进入不可中断D状态导致常规kill命令无法终止的情况,这类故障的表现和你描述的现象完全一致。
排障操作指引
- 前置说明:你已经确认所有安装的snap包为最新版本,不需要额外执行snap版本升级操作,排障重点放在snapd服务本身的逻辑异常和缓存冗余问题上
- 定位内存突增触发时机:执行
top -p $(pidof snapd)实时跟踪snapd内存占用,观察内存上涨是否集中在snap后台自动刷新、签名校验、旧版本缓存整理的阶段 - 清理冗余snap revision缓存:直接执行
snap refresh --purge,删除所有保留超过2个历史版本的旧snap包,80%以上的同类故障都是snapd遍历历史版本缓存时触发的内存泄漏导致的 - 替代强杀进程的恢复操作:常规手动kill无效是因为snapd是被systemd托管的root级守护进程,直接发终止信号会被systemd自动拉起,正确操作是执行
sudo systemctl restart snapd.service,不需要整机重启就能恢复正常运行 - 临时规避泄漏触发:修改snapd配置文件
/etc/snapd/snapd.conf,添加refresh.timer=24h配置项,把snap默认每4小时一次的后台刷新检查间隔拉长到24小时,大幅减少后台泄漏的触发频次
可用于定位问题的日志
- snapd服务运行日志:执行
sudo journalctl -u snapd.service -b,调取本次开机后snapd的全量运行记录,重点检索元数据校验失败、缓存目录访问报错、签名验证超时的异常栈信息 - 系统内存耗尽日志:执行
dmesg | grep -i oom,查看OOM Killer的运行记录,确认snapd进程进入D状态的触发原因(通常是磁盘IO访问卡死导致的无响应) - snapd缓存目录状态:检查
/var/snap/cache/目录的文件体积,正常该目录总大小不会超过100M,若存在数G级的临时文件,基本可以确定是缓存逻辑bug导致的内存泄漏
内容的提问来源于stack exchange,提问作者marcin_j
相关产品推荐
相关产品推荐

