返回文章列表
手贱把服务器CPU和内存干爆了
0 阅读

以下内容来自通义千问
当服务器的 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(需提前启用)。
- 在控制台中,可尝试:
- 执行
top、htop查看高负载进程; - 使用
kill -9 <PID>终止占用资源的进程; - 或直接重启实例(最后手段)。
- 执行
2. 强制重启服务器(最后手段)
如果无法通过控制台操作,且业务允许中断:
- 通过云平台控制台 重启实例;
- 物理服务器可手动按电源键或通过 IPMI 发送硬重启指令。
⚠️ 注意:强制重启可能导致数据丢失或文件系统损坏,仅在无其他选择时使用。
🛡️ 二、事后排查与优化(恢复后必须做)
1. 找出罪魁祸首
登录后立即执行以下命令:
# 查看 CPU/内存占用最高的进程
top
htop #(若已安装)
# 查看历史负载(需安装 sysstat)
sar -u # CPU
sar -r # 内存
# 检查是否有异常进程(如挖矿程序)
ps aux --sort=-%cpu | head -n 10
ps aux --sort=-%mem | head -n 10
2. 设置资源限制
- 使用
systemd的MemoryMax、CPUQuota限制服务资源; - 使用
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),可告知具体环境,我可以提供更详细的操作步骤。