vscode remote 只要一连接服务器,服务器 CPU 负荷瞬间飙升到几乎不能运行
我就纳闷了一个编辑器去拖累服务器干嘛???!!! vscode remote 连接服务器后,top 命令查看,一个叫“node”的进程 CPU 消耗量瞬间飙升,然后没过几分钟服务器就被这个进程拖垮了,关了 vscode,服务器负荷又正常了,这个怎么破?服务器 centos 系统,未安装 nodeJS
我就纳闷了一个编辑器去拖累服务器干嘛???!!! vscode remote 连接服务器后,top 命令查看,一个叫“node”的进程 CPU 消耗量瞬间飙升,然后没过几分钟服务器就被这个进程拖垮了,关了 vscode,服务器负荷又正常了,这个怎么破?服务器 centos 系统,未安装 nodeJS
试试 4G2 核?
关了好多了.
猜测是服务端 node 在搞索引.开发机是机械盘,扛不住
最好是推荐 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 )。
这是微软版 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
既然是 centos,那我就不懂了
说起来我的 vscode-remote 连过树莓派,在派上这么弱的性能都没问题,不懂为什么主服务器会被卡。个人感觉 node 服务端运行起来不怎么占用资源