Skip to main content
在 Linux 上,即使系统还有大量可用磁盘空间,Windsurf language server 也可能在启动时失败,并出现包含 “no space left on device” 的错误。这是由于 Linux 内核的 inotify watch 或 inotify instance 数量限制被耗尽所致,而不是因为磁盘空间真的用完了。 language server 使用 inotify 监视工作区中的文件更改。当触及内核限制时,系统会返回 ENOSPC 错误——通常会表现为 “no space left on device”。

现象

你可能会在 Windsurf 的输出日志中看到如下内容:
通常会伴随引用如下组件的堆栈跟踪(stack trace):
  • file_watcher
  • AddTrackedWorkspace
  • AddDirectoriesRecursive
通常会出现以下现象:
  • Windsurf 能正常打开
  • 语言服务器在启动后立即退出
  • 依赖语言服务器的功能(例如 Cascade、Autocomplete)无法使用

诊断

1. 检查你当前的 inotify 限制值

运行以下命令:
常见的默认值是 8192 个 watch 和 128 个实例。对于在大型工作区(尤其是 monorepo)中的 IDE 使用来说,这些值通常过低,并且可用配额还可能被其他消耗 inotify 资源的进程进一步压缩(容器、同步工具、其他编辑器、后台服务)。

2. 检查当前有多少 inotify 实例正在使用

如果该计数接近(或超过)你的 max_user_instances,新的 inotify 用户(例如语言服务器)可能会初始化失败。

解决方案

提升 inotify 限制值。你可以选择临时(重启前有效)或永久性地应用这些更改。

临时解决方案(在重启前有效)

永久解决方案(重启后仍然生效)

在采用任一修复措施后,重启 Windsurf。语言服务器应能正常启动。 这是 Linux 上众所周知的一个限制,会影响其他依赖文件监视器的 IDE 和开发者工具。如果你们组织采用集中方式管理系统配置,请联系 IT / 基础设施团队应用这些 sysctl 设置。

何时使用哪个数值

  • fs.inotify.max_user_watches=524288
    推荐用于大型代码仓库或 monorepo。每个被监控的文件/目录都会消耗内核内存(在 64 位系统上通常每个监控项约占用 ~1 KB),因此 524288 个监控项 大约会使用 ~512 MB 的内核内存。
  • fs.inotify.max_user_instances=1024
    推荐在运行多个会创建 inotify 实例的应用程序时使用(多个 IDE 窗口、容器、文件同步工具等)。默认值 128 在开发环境中很容易被耗尽。