服务器崩盘怎么解决?

服务器“崩盘”(通常指宕机、无响应或性能崩溃)是一个紧急且复杂的问题,解决步骤需要根据具体原因来定,下面是一个系统性的应急处理与长期解决框架,你可以按顺序排查。

第一阶段:紧急止损与定位(黄金5分钟)

1、确认症状,区分“崩盘”类型

完全无响应ping 超时,SSH连不上 → 可能硬件故障(电源、硬盘、内存)、内核崩溃或网络层问题。

能连但极慢ping 延迟高,页面加载转圈 → 大概率是资源耗尽(CPU、内存、磁盘I/O、带宽)或应用死锁。

部分服务挂掉:网站报错但SSH能进 → 应用层问题(如Web服务器、数据库连接池耗尽)。

2、立即执行紧急措施

重启大法(慎用):如果在云服务器上,直接通过云控制台强制重启。注意:这会丢失内存中未保存的数据,但有概率恢复服务。如果怀疑是硬件问题,重启可能无效

切断异常流量:如果是被攻击(如DDoS),立即开启云服务商的DDoS高防或临时封禁异常IP。

恢复快照/镜像:如果有定期快照和备用机器,直接切流量到备用服务器,再回头分析故障机,这是最快恢复服务的方式。

第二阶段:诊断根因(通过SSH维护通道或云控制台VNC)

如果还能进入系统,立刻检查以下三项核心指标:

1、CPU与负载

tophtop:看哪个进程占用CPU最高,如果是javamysqlphp-fpm 等,往往是业务代码出问题(死循环、慢查询、并发暴涨)。

uptime:看系统负载(load average),如果值远大于CPU核数(比如4核负载100),说明系统处于过载状态。

2、内存与交换空间

free -m:看物理内存(used)是否接近上限,如果swap(交换分区)使用率很高(si/so非零),说明内存不足,系统正在疯狂换页,磁盘I/O会爆炸

3、磁盘I/O

iostat -x 1:看%util是否接近100%,或await时间很长(>100ms)→磁盘是瓶颈

df -h:检查磁盘空间是否已满/分区或数据库分区满了,会直接导致服务无法写入。

dmesg | tail:查看系统日志,看是否有Out of memory: Kill process(OOM Killer杀掉进程)或I/O error 等硬件错误。

4、网络与连接数

netstat -anp | grep :80 | wc -l:统计连接数是否异常高。

ss -s:看TIME_WAIT、CLOSE_WAIT数量是否异常。

第三阶段:针对性恢复操作(按原因分类)

情况A:资源耗尽(最常见)

CPU打满:找到高消耗进程(PID),用kill -9 PID 杀掉,如果是应用问题,需要临时限流(如Nginx限制IP连接数)或扩容(加机器/升配置)。

内存打满:杀掉占用内存巨大且非核心的进程(如某些缓存写满的守护进程)。关键操作:检查是否内存泄漏。

磁盘打满du -sh /| sort -hr 找到大文件。常用操作删除日志文件(如/var/log 下的巨大日志)、清理临时缓存(/tmp)、清空核心转储文件(core.)。特别注意:如果是数据库文件导致满盘,不要轻易删数据文件,优先扩盘或迁移数据。

磁盘I/O打满:用iotoppidstat -d 找疯狂读写磁盘的进程,常见原因:数据库无索引的全表扫描、大量日志写入、swap换页,需要优化SQL关掉不必要日志

情况B:软件/配置问题

数据库崩溃:检查MySQL/PostgreSQL日志(/var/log/mysql/error.log),常见原因:连接数耗尽、死锁、硬盘空间满,恢复命令:systemctl restart mysql(可能需先删除锁文件)。

Web服务器崩溃:Nginx/Apache日志(/var/log/nginx/error.log)报错,常见原因:worker_connections 配置过小、后端upstream超时。快速恢复:重启Web服务,并调整worker_rlimit_nofile 等参数。

代码死循环/无限递归:部署了有Bug的新版本。回滚操作:立即将应用回滚到上一个稳定版本。

情况C:硬件/云资源故障

硬件:如内存报错、硬盘坏道(云上常见),云控制台会显示系统事件。解决方案:在云控制台申请更换实例挂载新的云硬盘恢复数据。

云服务商问题:比如宿主机宕机、网络交换机故障,如果无法通过云控制台操作,立即提工单给云厂商

第四阶段:事后复盘与预防(避免再次崩盘)

1、配置监控告警:这是最根本的预防,至少监控CPU、内存、磁盘、网络、关键进程(如Nginx、MySQL),当内存使用超过80%时,就要告警,而不是等到100%崩盘。

2、设置资源限制

- 对用户做限流(Nginxlimit_req)。

- 对进程做cgroup限制(如systemdMemoryMax)。

- 设置ulimit -n(文件描述符)避免连接数耗尽。

3、自动扩容:在云服务商配置弹性伸缩(Auto Scaling),当CPU超过阈值时自动加机器。

4、代码级优化:重点排查慢SQL(开启慢查询日志)、内存泄漏(用valgrindheap dump 分析Java)、日志爆炸(限制日志文件大小,如logrotate)。

>应急步骤:1. 上云控制台强制重启,2. 如果不行,用快照恢复切到备用机,3. 进入系统后看topdf -h杀掉资源刺客进程清空满盘的日志,4. 事后加监控、做限流、写复盘报告

建议把你服务器的核心服务(如Nginx、MySQL)配置为系统守护进程systemctl enable),并设置Restart=always,这样崩溃后可以自动重启,但治标不治本,必须找到根因。

文章摘自:https://idc.huochengrm.cn/fwq/25154.html

评论