有没有熟悉 node 的朋友, Linux 上编译 node16 快 12 小时了,咋这么慢。。。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LeeReamond
V2EX    Node.js

有没有熟悉 node 的朋友, Linux 上编译 node16 快 12 小时了,咋这么慢。。。

  •  
  •   LeeReamond 2021-12-02 00:54:01 +08:00 11100 次点击
    这是一个创建于 1458 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,从开始的时候感觉正常到现在怀疑自己是否哪里搞错了,一直编译,cpu 一直占用 100%(单核虚拟机)

    具体安装方法就是从官网上下个源码,然后解压,configure ,make && make install.

    编译过程中除了 CPU 占用高,内存占用也挺高的,不过 1G+swap 应该还扛得住,问题就是编译咋这么慢。而且编译之前也没要求装啥依赖之类的,像 python 编译起码还要装个 build-essential ,我是不是哪里做错了?

    32 条回复    2021-12-03 14:37:06 +08:00
    trn4
        1
    trn4  
       2021-12-02 03:23:03 +08:00
    单核 1G ,emmmm……不是很了解 node 的编译,但是这个配置是不是有点太低了。还有 build 一般还挺吃磁盘 IO 的。
    felixcode
        2
    felixcode  
       2021-12-02 03:46:02 +08:00 via Android
    单核肯定慢,不过影响更大的是内存不够用了 swap ,然后磁盘 io 性能还特别低。
    LeeReamond
        3
    LeeReamond  
    OP
       2021-12-02 04:27:59 +08:00
    @felixcode
    @xiadong1994 我观察任务管理器了,没有走 swp 卡 io 的情况,而且 ssd 读写速度都是 500MB/S 的,卡了也不会像机械硬盘那样。问题在于它只是个 node ,我这又不是在编译宇宙第一 IDE....安装包大小才几十 MB ,编译跳一下几十 KB 总有吧。。
    trn4
        4
    trn4  
       2021-12-02 04:42:51 +08:00
    应该就是单纯的慢,我在工作站上 make 了一下大概 5min 跑完
    thedrwu data-uid=
        5
    thedrwu  
       2021-12-02 05:27:54 +08:00 via Android   2
    估计 1G 内存连 linker 都跑不起来
    unnamedhao
        6
    unnamedhao  
       2021-12-02 07:47:50 +08:00 via iPhone
    比慢?试试装 xcode ,单纯的安装
    encro
        7
    encro  
       2021-12-02 09:16:39 +08:00
    1G 铁定慢,有什么想不开自己编译 node 呢。
    arischow
        8
    arischow  
       2021-12-02 09:33:35 +08:00 via iPhone
    1G 连 npm build 公司项目都可能 oom
    max1233
        9
    max1233  
       2021-12-02 09:51:22 +08:00
    12 个小时太夸张,1c2g 的小鸡都比这个快,编译 node 大概用了 15 分钟。话说为啥要编译呢 nvm 不香吗
    hronro
        10
    hronro  
       2021-12-02 10:20:50 +08:00 via iPhone
    会不会是连 v8 一起在编译?如果是的话那很正常
    libook
        11
    libook  
       2021-12-02 10:24:35 +08:00   2
    都是单核,也是有主频高低的,另外如果是虚拟机、容器之类的还会有其他开销。

    CPU 不够会慢,内存不够会崩,用 Swap 也会慢(即便用最快的 NVMe SSD 也远不及物理内存速度)。

    拿 Chromium 的编译来作参考,我找到了去年的一篇文章: https://textslashplain.com/2020/02/02/my-new-chromium-build-pc/
    16 核心 32 线程、64GB 内存、Intel Optane 905P NVMe SSD ,编译 Chromium 花了 53 分钟。
    skinny
        12
    skinny  
       2021-12-02 11:30:50 +08:00
    当年很多人说 Qt 编译非常慢,随便六七个小时,我当时在我的笔记本下载编译也顶多一个小时,你这个慢得太夸张了
    2i2Re2PLMaDnghL
        13
    2i2Re2PLMaDnghL  
       2021-12-02 12:50:34 +08:00
    make 有命令输出的
    如果一直有输出,那应该不是大问题,就是慢罢了
    如果没有,看下最后一条是啥卡住了,然后去提 Issue 问
    geniux
        14
    geniux  
       2021-12-02 12:53:33 +08:00
    用二进制,不用编译。
    12101111
        15
    12101111  
       2021-12-02 12:54:31 +08:00
    8 核+16G 内存+源码在 tmpfs 里, 用 Clang+ld.lld 开 LTO ,半个多小时
    你这个肯定是内存太小,swap 太严重了
    bootvue
        16
    bootvue  
       2021-12-02 13:01:33 +08:00
    make -j 核心
    rm0gang0rf
        17
    rm0gang0rf  
       2021-12-02 15:20:33 +08:00
    啥玩意也没这么慢。。1g 的没遇到过
    vanton
        18
    vanton  
       2021-12-02 15:24:49 +08:00
    内存太小,编译需要大量内存,你这 1G 就是瓶颈。
    内存对于编译速度的影响是指数级别的,你内存加大 1 倍速度提升可能有 10 倍。
    shiny
        19
    shiny  
    PRO
       2021-12-02 15:25:56 +08:00
    那有点离谱,以前在树莓派上编译都没花这么久
    DonaidTrump
        20
    DonaidTrump  
       2021-12-02 15:36:55 +08:00
    你也没有改源码,为什么要自己编译?直接下载二进制的运行不好么
    ppphp
        21
    ppphp  
       2021-12-02 15:39:42 +08:00
    要么是内存就慢
    JDog
        22
    JDog  
       2021-12-02 16:28:33 +08:00
    从标题来看,你不熟悉 node ,那么我推断你没有改 node 源码,请问为什么不直接用二进制包,而是自己编译呢?
    lianyue
        23
    lianyue  
       2021-12-02 16:34:01 +08:00
    一旦 用上 swap 编译 卡死你 go build 内存够用 10 秒 内存小 半小时我都没出结果
    ruanimal
        24
    ruanimal  
       2021-12-02 16:42:27 +08:00
    跑个题,为啥要编译安装 node
    seers
        25
    seers  
       2021-12-02 16:43:27 +08:00 via Android
    如果内存不够大就会浪费时间一直在 paging
    codingBug
        26
    codingBug  
       2021-12-02 20:35:38 +08:00 via Android
    是不是网络问题
    pengtdyd
        27
    pengtdyd  
       2021-12-02 20:52:31 +08:00
    没有金刚钻不揽瓷器活
    ericgui
        28
    ericgui  
       2021-12-03 05:01:02 +08:00
    请教楼主,为什么要编译 node ?要定制 runtime ?
    LeeReamond
        29
    LeeReamond  
    OP
       2021-12-03 11:21:09 +08:00
    @JDog
    @ericgui
    因为我打开 google 搜索“linux nodejs 安装”,里面刚好点到弹出来第一个页面写的第一个装法是编译。而我就像楼上的,凭经验以为 15 分钟就能搞定了,也无所谓直接下不下二进制。结果睡一觉起来还在跑
    ericgui
        30
    ericgui  
       2021-12-03 12:25:06 +08:00
    @LeeReamond 那你说你何苦
    hongch
        31
    hongch  
       2021-12-03 12:51:47 +08:00
    软件的官网不都有教程吗,而且还是最新的,源码,二进制,安装包 各个平台的都有
    leopod1995
        32
    leopod1995  
       2021-12-03 14:37:06 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2566 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 04:19 PVG 12:19 LAX 20:19 JFK 23:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86