vscode remote 只要一连接服务器,服务器 CPU 负荷瞬间飙升到几乎不能运行

2020-09-18 08:46:01 +08:00
 kisshere

我就纳闷了一个编辑器去拖累服务器干嘛???!!! vscode remote 连接服务器后,top 命令查看,一个叫“node”的进程 CPU 消耗量瞬间飙升,然后没过几分钟服务器就被这个进程拖垮了,关了 vscode,服务器负荷又正常了,这个怎么破?服务器 centos 系统,未安装 nodeJS

6205 次点击
所在节点    程序员
21 条回复
wtks1
2020-09-18 08:48:36 +08:00
服务器的硬件配置太低?
heyjei
2020-09-18 09:03:27 +08:00
估计是在做索引吧,你服务器上的 vscode 的目录删了让他重新初始化试试看
LokiSharp
2020-09-18 09:06:06 +08:00
微软 Azure 上 VSCode Online 官方推荐配置我记得是 2C4G 朝上,这玩意就是个鸡肋
kisshere
2020-09-18 09:09:01 +08:00
@heyjei 删了,然后启动 vscode 后还是一样,又生成了这个文件夹,然后 CPU 又飙升了
Kilerd
2020-09-18 09:12:11 +08:00
你猜猜 vscode 是用什么写的?
kisshere
2020-09-18 09:17:15 +08:00
@Kilerd vscode 用什么写的管服务器啥事,拖累我本地 Windows 也不可能拖累服务器啊
tfdetang
2020-09-18 09:33:56 +08:00
vscode remote 是需要在 remote 服务器装一个 vscode server 的。 你本地只是展示 UI, 剩余的 vscode 功能和代码执行都是放在 remote 的,所以你觉得为什么一个叫 node 的进程让你那么卡?
rbe
2020-09-18 09:34:32 +08:00
碰到过类似的事情,用 windows 做 server(普通 window10,非 win server),16g i7 4790,开了 remote 后 CPU 跑满,不得已关掉了。但这个不是必现的。
keepeye
2020-09-18 09:35:57 +08:00
我用的 wsl remote,各种卡,插件不能正常使用,遂放弃
asanelder
2020-09-18 09:54:27 +08:00
俺猜是 2G1 核,之前也是这情况

试试 4G2 核?
ruanimal
2020-09-18 10:06:45 +08:00
楼主 remote 编辑的文件夹太大了吧
oott123
2020-09-18 12:31:24 +08:00
那就不要用 vscode remote 啦,试试这个: https://marketplace.visualstudio.com/items?itemName=liximomo.sftp
xiaotianhu
2020-09-18 13:13:04 +08:00
+1
同事用这玩意,开发机直接要凉了感觉

关了好多了.
猜测是服务端 node 在搞索引.开发机是机械盘,扛不住
kokodayo
2020-09-18 13:18:27 +08:00
还有个方案:服务器上装 linux 版 vs code,然后 X11 Forwarding
zhenjiangidc
2020-09-18 13:25:15 +08:00
硬盘不行???
MengiNo
2020-09-18 14:28:16 +08:00
都叫 remote 了,不拖死服务器难道还拖死本机么 ... 为了让我那 8G 的 15 款 mbp 再发挥几年余热,前一段搞了个 2c4g 的腾讯云,vscode-remote 体验挺棒的,mbp 上只要 在 /usr/local/bin 里放一个 dockerd 的二进制文件,其他都交给服务器,连 git 甚至都可以不用装(正好 big sur 的预览版 也有 bug 装不了 xcode-select 套件),.devcontainer 文件夹 直接放在 Dropbox / Github 里真的很方便。

最好是推荐 2c4g 的机器,1c2g 倒也不是说不行,消耗较少的语言、项目还是可以跑得动的,合理控制插件即可。比如 Laravel 项目,Gitlens + PHP Intelephense + PHPUnit Test Explorer + phpfmt + DocBlocker 1c2g 还是很舒服的。其他的像 Golang 、Python 1c2g 也勉强能用。但是 一个 Typescript 的基于 Antd 的管理后台,仅开了 Gitlens + Eslint + Prettier 直接卡的起飞,必须上 2c4g 否则 yarn install 都拉不下来(毕竟 black hole ),直接 CPU 冲到 100%,服务器就假死了(等好久 zsh 进程会把 node 进程杀掉以恢复正常,但是我是实在懒得等,都是直接去腾讯云后台强制重启)。

如果没有什么特别的需求,特别是本地机器性能不错的情况下,还是 WSL2 + Docker,感觉足够了,传统一点好。vscode-remote 不但要投入服务器成本,在某些语言的项目上也只能算差强人意(要不是 remote 我是真的一点都不想用本身就是 Js 写的 vscode )。
lovecy
2020-09-18 16:14:35 +08:00
“我就纳闷了一个编辑器去拖累服务器干嘛?”,其实这个就跟你浏览器请求一个页面,结果服务器崩了一个道理。
remote 连接后,是不是开了比较大的文件夹或工作区,还有插件太多也会导致资源占用高
spcharc
2020-09-19 11:09:27 +08:00
为什么都猜测是 node 搞索引?

这是微软版 linux kernel 的锅啊。
node 的服务端有个 event loop 。它和所有 event loop 一样,如果没事可做它会做个 syscall 睡一会儿,起来接着检查有没有事可做。
然而 wsl 里 linux 内核是 windows 模拟的,较新版本的 glibc ( 2.31 或以上)因为改写了 nanosleep 的逻辑,会无法正确调用这个模拟 kernel 的 syscall 。
老版本使用的是 CLOCK_MONOTONIC,新版本改用 CLOCK_REALTIME,而 WSL 从来没有支持过后者。微软当时做模拟 kernel 是针对老 glibc 。
因为大量程序都要用到 glibc,这会导致各种程序里所有要 sleep 的地方都会立刻返回,包括 node 。
https://sourceware.org/git/?p=glibc.git;a=commit;f=posix/nanosleep.c;h=3537ecb49cf7177274607004c562d6f9ecc99474

自己在测试 wsl 里测试 bash 命令:
sleep 5
如果这个命令立刻返回了,而不是等五秒再返回,恭喜你中招了。

解决方案:
降级 glibc 到 2.30 或以下,或换老发行版环境,或 wsl2 走起,或加入微软 Insider 测试渠道来升级微软修复过的 kernel
ruanimal
2020-09-19 11:11:39 +08:00
@spcharc lz 的是服务器,不是 wsl 。。。
spcharc
2020-09-19 11:23:20 +08:00
@ruanimal 原来如此。我知道这次 sleep 的升级会导致 wsl 出现问题,看到 vscode-remote 就以为又是这个问题

既然是 centos,那我就不懂了

说起来我的 vscode-remote 连过树莓派,在派上这么弱的性能都没问题,不懂为什么楼主服务器会被卡。个人感觉 node 服务端运行起来不怎么占用资源

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/708150

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX