【VSCode】记一次ssh连接服务器bash: fork: retry: Resource temporarily unavailable解决方案
省流
在另一台服务器上通过ssh连接后,删除服务器上的~/.vscode-server文件夹,并kill掉所有~/.vscode-server相关的进程。
背景
假期需要通过easyconnect连接学校服务器,但近几天总是报错bash: fork: retry: Resource temporarily unavailable无法通过vscode和终端ssh连接,然而其他用户能正常连接,首先排除服务器本身的问题。
解决方案
直接在本地终端通过ssh连接也会出现上述错误,因此考虑通过另一台内网服务器b通过ssh连接到该服务器a,发现通过b可以成功登录a,查询发现a上的用户进程数等数据均处于正常范围内,于是尝试使用vscode登录。
此时通过vscode的remote-ssh连接服务器a时,仍然出现bash: fork: retry: Resource temporarily unavailab的报错,且在连接期间通过服务器b上的ssh会话执行指令,也无法执行并出现上述报错。关闭vscode远程连接后,服务器b上的ssh会话中的报错消失,可正常执行指令。到这里可以基本确定是vscode的锅了。
因此,为清除vscode在远程服务器上的缓存,删除了远程服务器上的~/.vscode-server文件夹,此时通过vscode仍然无法登录。查询用户进程时发现,尽管~/.vscode-server文件夹已经删除,还是有很多路径在~/.vscode-server下的相关进程,且都在休眠。于是将服务器上vscode-server相关的所有进程kill掉,重新通过vscode的remote-ssh连接,vscode会在服务器上重新下载~/.vscode-server,登录成功。
补充
查询资料时发现,这个问题在2021年就已经有人在github提过issue了,其原因是Linux操作系统对用户资源的限制,虽然查询时还有很多资源未被使用,但操作系统不能分配给用户。但vscode在远程连接时为什么会出现大量创建进程的异常(推测),暂时还不清楚,这个issue后来一直未解决(可能出现问题的人比较少吧
通过vscode远程连接服务器,会在关闭服务器后在服务器上留下几个休眠进程,官方的说法是8小时后会自动结束进程。可是我在kill进程时发现有一些几个月前创建的vscode-server进程,推测是Ubuntu24.04上机制可能还不太完善
根据官方在github上的说法,在远程服务器上下载的~/.vscode-server,实际上相当于在远程服务器上运行一个vscode,然后将运行结果镜像到本地vscode上,相比JetBrains的IDE(本质是在IDE手动配置SFTP+SSH),无需手动上传or下载文件夹,真是太奇妙了

浙公网安备 33010602011771号