2026-01-19
运维
00

目录

🔧 一、应急恢复方法(当 SSH 无法连接时)
1. 使用带外管理接口
2. 强制重启服务器(最后手段)
🛡️ 二、事后排查与优化(恢复后必须做)
1. 找出罪魁祸首
2. 设置资源限制
3. 配置监控与告警
4. 优化系统配置
✅ 三、预防措施(避免再次发生)
总结

以下内容来自通义千问

当服务器的 CPU 和内存使用率达到 100%,导致 SSH 无法连接时,通常意味着系统资源已完全耗尽,无法响应新的网络请求(包括 SSH)。此时常规的远程管理手段失效,需要借助带外管理(Out-of-Band Management)物理访问 来恢复系统。以下是可行的处理方法和预防建议:


🔧 一、应急恢复方法(当 SSH 无法连接时)

1. 使用带外管理接口

许多服务器(尤其是企业级或云服务器)提供带外管理功能,即使操作系统无响应也能访问:

  • 物理服务器
    • IPMI / iDRAC(Dell) / iLO(HPE):通过专用管理网口登录 Web 控制台或 KVM,可查看进程、重启服务或硬重启。
  • 云服务器(如阿里云、AWS、腾讯云等)
    • 使用 VNC 控制台串行控制台(Serial Console) 登录(即使 SSH 不通)。
    • 阿里云示例:进入 ECS 控制台 → 实例详情 → “远程连接” → 使用 VNC 连接
    • AWS:使用 EC2 Serial Console(需提前启用)。
    • 在控制台中,可尝试:
      • 执行 tophtop 查看高负载进程;
      • 使用 kill -9 <PID> 终止占用资源的进程;
      • 或直接重启实例(最后手段)。

2. 强制重启服务器(最后手段)

如果无法通过控制台操作,且业务允许中断:

  • 通过云平台控制台 重启实例
  • 物理服务器可手动按电源键或通过 IPMI 发送硬重启指令。

⚠️ 注意:强制重启可能导致数据丢失或文件系统损坏,仅在无其他选择时使用。


🛡️ 二、事后排查与优化(恢复后必须做)

1. 找出罪魁祸首

登录后立即执行以下命令:

bash
# 查看 CPU/内存占用最高的进程 top htop #(若已安装) # 查看历史负载(需安装 sysstat) sar -u # CPU sar -r # 内存 # 检查是否有异常进程(如挖矿程序) ps aux --sort=-%cpu | head -n 10 ps aux --sort=-%mem | head -n 10

2. 设置资源限制

  • 使用 systemdMemoryMaxCPUQuota 限制服务资源;
  • 使用 cgroups 或容器化(如 Docker)隔离关键服务;
  • 配置 ulimit 限制用户进程资源。

3. 配置监控与告警

  • 安装 Prometheus + Node Exporter + Alertmanager
  • 或使用云厂商监控(如阿里云云监控、Zabbix、Datadog);
  • 设置阈值告警(如 CPU > 90% 持续 5 分钟)。

4. 优化系统配置

  • 调整内核参数(如 vm.overcommit_memory);
  • 启用 OOM Killer 日志记录;
  • 定期清理日志、缓存(journalctl --vacuum-time=7d)。

✅ 三、预防措施(避免再次发生)

措施说明
预留资源余量生产环境 CPU/内存使用率建议不超过 70%
启用 swap(谨慎)可缓解内存不足,但可能引发 I/O 瓶颈
部署看门狗脚本自动检测并重启失控进程
使用容器/微服务限制单个应用资源上限
定期压力测试模拟高负载场景,验证系统稳定性

总结

当 SSH 因资源耗尽而失效时,唯一可靠的方法是通过带外管理(如云控制台 VNC/IPMI)介入。事后务必分析原因、限制资源、部署监控,防止问题复发。

如你使用的是特定云平台(如阿里云、AWS),可告知具体环境,我可以提供更详细的操作步骤。

本文作者:Nongsc

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!