之前的机器是 2 核 4g 的配置,打包 nextjs 项目经常不成功,后面升级了 4 核 8G 打包成功了,但是速度很慢,现在好了直接不能打包!
无奈使用免费的 github Actions ,发现吊打阿里云服务器啊,还没一个免费的服务好用!这钱花的不值~
是我不会用阿里云 esc 吗,还是阿里云的 ecs 有猫腻。。。
1
newaccount 2 天前
默认没有 swap 吧,你加个试试看
|
2
rekulas 2 天前
这个最好排查下,不一定是阿里的问题,有可能你这套打包就是超了 8g 呢。。。我们之前有一个 nuxt 的也是打包内存直接 oom ,现在的前端几十个页面打包时间几分钟内存数 G ,后端数百项 api 打包 20s 内存几百 M ,实在不想吐槽
至于 github ,它的机器确实比较厚道,你的用的实例可能不止 8g |
3
ttkit OP @newaccount 大佬,swap 是什么?我一个小前端不是很懂运维的知识。
|
5
newaccount 2 天前
@ttkit #3 windows 的虚拟内存知道吧,在 linux 上就是 swap
|
6
ttkit OP @newaccount 好的,我研究下
|
7
skallz 2 天前
打包直接用云效啊,你都用阿里云了为啥不直接用配套的云效流水线。。。
|
8
hefish 2 天前
就看在 esc ,ecs 混用的情况,感觉 op 技能还能再提高一些。
|
9
baobao1270 2 天前 1
|
12
ttkit OP @baobao1270 这个就是专业👍
|
13
gadfly3173 2 天前 via Android 1
我本地一个 build 完 12MB 的 angular9 的项目,打包的时候吃掉了 2.4GB 内存,再加上你系统其他占用什么的,要是没 swap 的话,超 8G 应该很轻松
|
14
salmon5 2 天前
前端?
|
15
ThisZKC 2 天前
国内各大公有云都有资源 基本官网价格的六折左右都能买到
|
16
laminux29 2 天前
关于 swap:
Windows 有个功能叫虚拟内存,在磁盘上设定一个文件,当成内存用。当物理内存满了后,就会开始用磁盘上的这个文件。代价是,早期用机械硬盘,速度极慢。但现在 nvme 了,速度很快。 Linux 的 swap ,本质上也是虚拟内存,但是逻辑与 Windows 完全不一样,坑了很多人。swap 是 Linux 主动进行管理,把一小部分不常用的内容放在这里。当物理内存满了后,不一定会使用 swap ,而是会直接 kill 进程。所以经常发现,Linux 物理内存都用完了,swap 却几乎没怎么用。 |
17
sagaxu 2 天前
打包前先设置环境变量
export NODE_OPTIONS=--max_old_space_size=4096 |
21
sagaxu 2 天前
node 下输入 v8.getHeapStatistics() 看看输出是什么,监控里显示内存只用了 50%,不大可能是 ECS 的问题
|
22
ttkit OP @sagaxu v8.getHeapStatistics()
{ total_heap_size: 6516736, total_heap_size_executable: 262144, total_physical_size: 6291456, total_available_size: 2192958816, used_heap_size: 4726808, heap_size_limit: 2197815296, malloced_memory: 262312, peak_malloced_memory: 172416, does_zap_garbage: 0, number_of_native_contexts: 2, number_of_detached_contexts: 0, total_global_handles_size: 8192, used_global_handles_size: 2848, external_memory: 2293864 } 输出的这些。 |
23
sagaxu 2 天前
heap_size_limit: 2197815296, heap 最大只有 2G ,这个限制没打开
参考 v8 的代码 heap/heap.cc size_t Heap::HeapSizeFromPhysicalMemory(uint64_t physical_memory) { // Compute the old generation size and cap it. uint64_t old_generation = physical_memory / kPhysicalMemoryToOldGenerationRatio * kHeapLimitMultiplier; old_generation = std::min(old_generation, static_cast<uint64_t>(MaxOldGenerationSize(physical_memory))); old_generation = std::max({old_generation, static_cast<uint64_t>(V8HeapTrait::kMinSize)}); old_generation = RoundUp(old_generation, PageMetadata::kPageSize); size_t young_generation = YoungGenerationSizeFromOldGenerationSize( static_cast<size_t>(old_generation)); return static_cast<size_t>(old_generation) + young_generation; } 默认只能使用 1/4 的物理内存 |
24
ttkit OP @sagaxu 好兄弟可以了,我之前写了一个 sh 脚本:
log "正在构建项目..." rm -rf .next/ NODE_OPTIONS="--max-old-space-size=4096" npm run build || handle_error "构建失败" 没加 export 导致的。 这个做备选方案吧,还是 github actions 的自动化部署方案优秀,可以省不少钱。 |
25
Nitromethane 2 天前
这和阿里云有屁关系,换到 aws 照样同样的错误
|
26
goodryb 2 天前 2
打包这种重复性工作可以考虑用抢占实例,价格便宜,配置可以开高一些
|
27
msg7086 2 天前
免费打包服务好用那是因为有大佬帮你付了费了,要是换你自己掏钱支付这些 runner 的费用你就知道肉疼了。Github 的收费打包机 2c7g (免费打包机的一半规格)收费价格是每分钟$0.008 ,相当于一天$11.52 ,一个月 300 多美刀。你再和 ECS 的价格比比?
|
28
aru 2 天前
Github Actions 提供的虚拟机配置比较高:Linux 4 核 16 GB 内存 14 GB ssd
性能全面打爆你用的这个 ecs 吧,特别 cpu 配额和 ssd 的 iops |
30
darkengine 2 天前
今天刚试了 build 一个 express 项目爆了 heap ,不过我用的是 AWS 的 t2.micro 1C1GB 的丐版配置 😂
|
32
wnpllrzodiac 1 天前 via Android
前端代码都干了啥,塞了一个操作系统?
|
33
Dragonphy 1 天前
Next.js 项目是这样的,我都不知道塞了什么,上次跑一个 GitHub 上拉下来的服务,我还特地更新了本地 CI 服务器配置。
|
34
ttkit OP @darkengine 哈哈,node 项目就这样,npm 包依赖太多
|
35
ttkit OP @wnpllrzodiac 打包的时候要分析几千个模块,nextjs 又要区分哪些页面需要服务端渲染哪些需要 spa 打包,所以页面多了会变慢。我现在用的是 nextjs 是 14 版本,Next.js 15 会好些,默认的打包工具从 Webpack 升级为 Turbopack 。
|
36
ttkit OP @Dragonphy 准备有时间升级 15 版本了,看官方说 15 版本默认使用 Turbopack 了,Turbopack 的速度比 Webpack 快 700 倍,比 Vite 快 10 倍。这使得项目的构建速度大幅提升,开发者可以更高效地进行开发。
|
37
darkengine 1 天前
@wnpllrzodiac 有一张很出名的梗图,node_modules 的。。。
|
38
BG7ZAG 1 天前
借助云效进行打包~
|
39
cyningxu 1 天前 via Android
上 swap ,云服务器默认都不开 swap 的,只要内存满了就会挂
|
41
Sunzehui 1 天前
限制一下 nuxt 的并行打包数量应该可以解决
|
42
corcre 1 天前
@darkengine 勒索病毒加密了一小时还在加密 node_modules 文件夹那张吗🐶
|
43
darkengine 1 天前
@corcre “全宇宙最重的东西”那张 😂
|
44
importmeta 1 天前
我自己项目在本地打包, 只推镜像.
|
45
PROJECT 1 天前
|
46
jiangzm 1 天前
好奇问下 为什么会用 nextjs/nuxtjs 这类框架,是确实有 SSR 需求还是其他原因呢
|
47
sleepm 1 天前
加 swap 管用,一直以为工具有 bug...
sudo fallocate -l 3G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo swapon --show free -h echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab |
49
ttkit OP @importmeta 啊这。。
|
51
a1248499257 1 天前
next.js 可以配置下 config ,限制下构建内存,不过会比较慢,另外这框架确实很容易内存溢出.. 例如在使用它自身的图片优化服务的时候
|
52
tracebundy 1 天前
你想阿里云 8G 达到 16G 的效果?
|
53
perfectlife 1 天前
前端在构建这一块现在搞得比后端真的是麻烦多了,又大又重
|
54
seansong 1 天前
前端太卷了,我平时构建 react 的时候,就感觉相当吃资源,也不理解这里面到底干了啥,以前用 nextjs ,后来换到 vite ,打包速度有提升,打包时候的占用也稍微好一些了
|
55
terranboy 1 天前
阿里云打包确实慢
|
56
shadowyue 1 天前
前端构建的工具链用 nodejs 的迟早会被淘汰掉,性能太低了。
估计以后都是被 rust 语言重写的工具链替代。 |
57
yuezhiyuan 1 天前
nodejs 赶紧淘汰吧
换个东西来支持 js |
58
daimaosix 1 天前 via Android
啥机型?
|
59
Lanzhijiang 14 小时 32 分钟前 via Android
开 swap 基本上就能解决了。不过我认为阿里云默认不开 swap 就是故意的,想要一些人傻傻去升级
|
60
Betterr 11 小时 31 分钟前
我用过的大部分 vps 的磁盘性能都堪忧,有的时候 swap 可以拉崩磁盘导致系统无响应...我后来都是只开 zram ,完全不敢在垃圾盘的 vps 上开 swap 了。
|
61
Betterr 11 小时 30 分钟前
@Lanzhijiang 才发现没有 at 上,重新 at 一下。
|
62
heimoshuiyu 7 小时 14 分钟前
应该吐嘈 javascript 框架
|