记一次事故,服务器炸了。
是因为我服务器内存很小,我用 pm2 部署了一个 nextjs 项目还跑了几个 node 服务,然后我还在服务器里编译构建 next 项目,导致我想要重新构建 next 时服务器直接炸了,怎么都连不上。
因为在编译构建 next 时服务器压力很大,要吃差不多 1 ~ 1.5g 的内存吧,我 2g 内存瑟瑟发抖。
当我在执行 next build 时,next.js 会:
- 编译所有的 ts/js 文件;
- 扫描并预渲染每个页面(SSG、ISR、Server Components
- 打包资源,生成
.next目录 - 开启 webpack,可能会吃掉 500m ~ 1.5g 的内存
所以不要在服务器里编译什么项目了,服务器表示压力很大!
为了防止下一次还犯错,我有必要给它加一个 swap 分区,稍微缓解下内存焦虑的问题;
ps:我的 Linux 是 Ubuntu
# 创建2g的swap文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 设置开机自动挂在
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab

确认下是否创建成功
free -h
swapon --show
成功的话会输出对应 swap 文件的大小
默认 Linux 会比较“积极”地使用 swap,你可以降低这个倾向,提升系统响应:
# 让系统更倾向用 RAM 而不是 swap
sudo sysctl vm.swappiness=10
(默认是 60,数值越小越倾向于用物理内存)ß