EC2 t2.micro服务器上Node.js应用保活方案咨询
针对EC2 t2.micro上Node.js应用的保活方案及问题排查
先解决nohup失效的问题
你用nohup后关闭SSH进程停止,是因为启动时没正确脱离终端会话,正确的启动命令应该是:
nohup node index.js > app.log 2>&1 &
> app.log 2>&1把标准输出和错误输出重定向到日志文件,避免终端依赖- 末尾的
&让进程后台运行,此时即使关闭SSH,进程也不会收到SIGHUP信号被终止
优化pm2/forever的使用(解决崩溃问题)
t2.micro只有1G内存,应用崩溃大概率是内存耗尽或CPU积分耗尽导致的,给pm2加资源限制参数即可缓解:
- 限制内存阈值,达到后自动重启:
pm2 start index.js --max-memory-restart 200M - 给Node进程设置内存上限,避免内存泄漏耗尽资源:
pm2 start index.js --node-args="--max-old-space-size=256" - 用
pm2 monit实时监控CPU、内存占用,排查是否有内存泄漏或异常负载
更可靠的系统级保活方案
1. systemd(推荐,Linux系统原生支持)
这是最稳定的保活方式,属于系统级服务,不受用户会话影响,支持开机自启:
- 创建服务配置文件:
sudo nano /etc/systemd/system/node-app.service - 写入以下内容(替换成你的实际路径和用户名):
[Unit] Description=Node.js 应用服务 After=network.target [Service] User=ubuntu # 你的服务器登录用户名 WorkingDirectory=/home/ubuntu/your-app-dir # 应用所在目录 ExecStart=/usr/bin/node index.js # node的实际路径,可用`which node`查询 Restart=always # 进程崩溃/系统重启后自动启动 RestartSec=10 # 重启间隔10秒 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target - 启用并启动服务:
sudo systemctl daemon-reload sudo systemctl start node-app sudo systemctl enable node-app # 设置开机自启 - 查看状态和日志:
sudo systemctl status node-app journalctl -u node-app -f # 实时查看日志
2. supervisord
另一个常用的进程管理工具,适合多进程管理场景:
- 安装supervisord(Ubuntu/Debian):
sudo apt update && sudo apt install supervisor - 创建应用配置文件:
sudo nano /etc/supervisor/conf.d/node-app.conf - 写入配置:
[program:node-app] directory=/home/ubuntu/your-app-dir command=/usr/bin/node index.js autostart=true autorestart=true user=ubuntu stdout_logfile=/var/log/node-app.log stderr_logfile=/var/log/node-app.err.log - 重启服务生效:
sudo supervisorctl reload - 管理命令:
sudo supervisorctl start node-app # 启动 sudo supervisorctl stop node-app # 停止 sudo supervisorctl restart node-app # 重启
关键优化建议(针对t2.micro资源限制)
- 排查应用内存泄漏:用
node --inspect连接调试,或用pm2 dump导出内存快照分析 - 清理不必要的依赖、临时文件,避免磁盘空间不足
- 开启Node.js的
--expose-gc参数,手动触发垃圾回收(仅应急用,不推荐长期依赖)
内容的提问来源于stack exchange,提问作者user19730992
相关产品推荐
相关产品推荐

