Sublime Text报“No space left on device”是因Linux inotify监视点耗尽,需调高fs.inotify.max_user_watches和max_user_instances,并重启Sublime、开启auto_reload、排除无关目录及禁用冗余插件。

Sublime Text报inotify_add_watch failed: No space left on device怎么办
这不是Sublime Text的bug,而是Linux内核拒绝为其分配更多inotify监视点——fs.inotify.max_user_watches已用尽。现象通常是:外部修改文件后不自动重载、命令行里inotifywait -m -r .直接报错No space left on device,甚至VSCode、JetBrains也同时失灵。
验证当前限制:
运行cat /proc/sys/fs/inotify/max_user_watches,若输出≤16384,基本就是它了。
- 临时生效(适合快速验证):
sudo sysctl fs.inotify.max_user_watches=524288,再执行sudo sysctl -p - 永久生效:追加
fs.inotify.max_user_watches=524288到/etc/sysctl.conf,然后sudo sysctl -p - 必须重启Sublime Text进程(不是“Reload Window”,要关掉所有窗口再启动)
为什么调高max_user_watches后Sublime还是不自动重载
因为auto_reload开关默认是关闭的,且即使开了,也可能被原子写入、权限变更或WSL2环境干扰。
- 手动开启:
Preferences → Settings – User里添加"auto_reload": true,保存即生效 - 避免丢修改:同步确认
"hot_exit": true和"remember_open_files": true已启用 - 注意原子写入陷阱:Vim、某些构建工具会先写临时文件再mv覆盖,Sublime可能错过事件;可尝试设
"atomic_save": false减少干扰 - WSL2用户请放弃指望inotify——它在WSL2中本就不稳定,建议改用Windows原生Sublime或切到VS Code
比调系统参数更有效的做法:让Sublime少监看目录
Sublime本身不提供像VSCode的files.watcherExclude那样精细的排除配置,但你可以通过系统级过滤减少压力。
- 用
inotifywait观察实际监控路径:inotifywait -m -e create,modify,delete_self . -r,看哪些目录被频繁触发 - 对
node_modules、dist、.git等目录,可在项目根目录建.inotifyignore(需配合第三方工具如inotify-tools的扩展脚本) - 更务实的做法:把大型依赖目录移出工作区,用软链接或单独打开——Sublime只监听你真正编辑的源码目录
- 禁用不必要的插件,尤其那些宣称“实时扫描”“自动索引”的插件,它们常悄悄开一堆watch
容易被忽略的另一个inotify限制:max_user_instances
很多人只调max_user_watches,却忘了max_user_instances——它控制每个用户能创建多少个inotify实例。Sublime、VSCode、tail -f、nodemon全算在内。
- 查当前值:
sysctl fs.inotify.max_user_instances(默认常为128) - 若多个开发工具同时跑,建议一并调高:
sudo sysctl fs.inotify.max_user_instances=1024 - 同样需写入
/etc/sysctl.conf并sudo sysctl -p才持久 - 调太高可能影响低内存机器稳定性,524288 + 1024 是较平衡的组合
max_user_watches和max_user_instances得一起看,光调一个没用;而auto_reload是否真起效,得靠外部改文件+观察Sublime界面反应来验证,不能只看配置写了没。


















