You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCE虚拟机运行一段时间后休眠断连,如何保持服务长期正常运行?

GCE VM 运行中断、自动重启问题排查与解决步骤

1 先确认VM非预期重启的根因

  • 登录GCE控制台进入对应VM实例详情页,查看监控标签页下的CPU使用率、内存使用率、磁盘IO指标,确认1.5小时左右的时间点是否出现指标骤降后恢复的典型重启特征
  • 登录VM后执行命令last reboot查看系统重启记录,确认重启时间是否和你遇到的中断时间完全吻合
  • 执行dmesg -T查看内核日志,排查是否存在OOM(内存溢出)触发的系统强制重启、内核崩溃等底层问题

2 排查GCE VM实例的配置问题

  • 确认你使用的VM实例类型是否为可抢占式实例(Spot VM):可抢占式实例最长运行时间为24小时,且随时可能被GCE平台回收,非常容易出现运行1-2小时就被强制重启/销毁的情况,若使用的是可抢占式实例,直接更换为标准按需实例即可解决
  • 检查VM的可用性策略配置:确认是否开启了「主机维护时迁移实例」,如果未开启,GCE进行宿主机运维时会直接重启你的VM
  • 检查VPC防火墙规则:确认MQTT使用的端口(默认1883/8883)、SSH端口22的入站/出站规则超时时间是否设置过短,同时确认VM内的操作系统防火墙(ufw/iptables/firewalld)没有配置超时自动封禁规则

3 配置应用开机自启与进程守护

很多时候VM本身无故障,但手动在SSH终端启动的应用会在SSH断开后随会话结束被终止,或是VM重启后没有自动拉起:

  • 对于Node.js前端,推荐使用pm2管理进程,配置pm2 startup实现开机自启,同时设置进程崩溃自动重启规则
  • 对于Java后端,可通过systemd配置系统服务,添加Restart=always参数,进程崩溃或VM重启后会自动拉起服务
  • 不要直接在SSH交互终端启动应用,避免SSH断开后SIGHUP信号杀掉进程,临时启动可在命令结尾加&或者用nohup命令包裹,示例:nohup java -jar xxx.jar &

4 长连接保活配置

针对MQTT和SSH长连接容易被防火墙切断的问题:

  • 本地SSH配置文件添加ServerAliveInterval 60参数,每60秒给服务器发心跳包避免连接超时
  • MQTT客户端配置心跳包(keepalive)参数,设置为30-60秒,同时服务端的MQTT broker也对应配置匹配的超时时间

内容的提问来源于stack exchange,提问作者Aurbcd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:36:01