云服务器怎么排查故障?常见问题与诊断流程
服务器出故障时,快速定位原因是运维的核心能力。网站打不开、响应慢、数据库连不上、CPU跑满,这些问题背后可能是配置、程序、网络、攻击等多种原因。本文整理常见故障的诊断流程,帮你按步骤排查。
一、排查的基本思路
故障排查的核心是「分层定位」。从外到内,逐层排除。
第一层是网络。用户能否访问服务器IP,ping是否通,端口是否开放。
第二层是服务。Nginx、PHP、MySQL等服务是否运行,端口是否监听。
第三层是资源。CPU、内存、磁盘、带宽是否正常,有没有跑满。
第四层是应用。程序日志有没有报错,数据库连接是否正常。
第五层是安全。有没有被攻击,有没有异常进程,有没有木马。
按这个顺序排查,可以快速缩小问题范围,避免盲目操作。
二、网站打不开的诊断流程
第一步,确认服务器是否在线。用ping测试服务器IP,如果ping不通,可能是服务器宕机、网络故障或防火墙拦截ICMP。登录云控制台查看服务器状态。
第二步,确认端口是否开放。用telnet或nc测试80、443端口,如果不通,可能是防火墙拦截或Nginx未运行。
第三步,确认Nginx是否运行。执行systemctl status nginx查看状态,如果未运行,执行systemctl start nginx启动。
第四步,确认域名解析。用nslookup或dig查看域名解析是否正确,是否指向当前服务器IP。
第五步,确认备案和过白。国内机房需要域名备案和过白,未备案或未过白的域名会被拦截。如果备案和过白都正常,检查Nginx配置是否有误。
第六步,查看Nginx错误日志。/var/log/nginx/error.log中记录了Nginx的错误,根据报错定位问题。关于建站流程中的域名解析和过白,可以参考云服务器怎么搭建网站一文中关于域名和备案的说明。
三、响应慢的诊断流程
第一步,确认是服务器慢还是网络慢。用ping测试延迟,用mtr测试路由。如果延迟高,是网络问题;如果延迟正常但页面加载慢,是服务器问题。
第二步,查看CPU使用率。用top查看,如果CPU跑满,定位是哪个进程占用高。常见的高CPU进程包括PHP-FPM、MySQL、Nginx。
第三步,查看内存使用率。用free -h查看,如果内存不足,系统会使用Swap,性能下降。查看是否有进程内存泄漏。
第四步,查看磁盘IO。用iostat查看,如果IOPS接近上限,说明磁盘成为瓶颈。常见原因包括数据库查询慢、日志写入频繁。
第五步,查看数据库慢查询。MySQL的慢查询日志记录了执行慢的SQL,分析慢查询,优化索引或SQL语句。
第六步,查看带宽。百脉云控制台提供带宽监控,如果带宽跑满,用户访问会排队。建议接入CDN分流静态资源。关于带宽选型的方法,可以参考云服务器带宽怎么选一文中关于带宽测算的说明。
四、数据库连接失败的诊断流程
第一步,确认MySQL是否运行。执行systemctl status mysql查看状态,如果未运行,启动MySQL。
第二步,确认端口是否监听。执行netstat -tlnp | grep 3306查看3306端口是否监听。如果未监听,检查MySQL配置。
第三步,确认用户名密码。用mysql -u 用户名 -p测试连接,如果密码错误,重置密码。
第四步,确认权限。检查数据库用户是否有权限访问目标数据库,用SHOW GRANTS FOR '用户'@'主机'查看。
第五步,确认防火墙。检查防火墙是否放行3306端口。如果数据库只允许本地访问,确认连接地址是localhost。
第六步,查看MySQL错误日志。/var/log/mysql/error.log中记录了MySQL的错误,根据报错定位问题。
五、CPU跑满的诊断流程
第一步,用top查看CPU使用率,按P键按CPU排序,找到占用最高的进程。
第二步,如果是PHP-FPM占用高,查看PHP慢日志,定位慢执行的PHP脚本。常见原因包括代码死循环、数据库查询慢、外部API调用超时。
第三步,如果是MySQL占用高,查看慢查询日志,定位慢SQL。常见原因包括缺索引、全表扫描、锁等待。
第四步,如果是Nginx占用高,查看访问日志,定位高频请求。常见原因包括CC攻击、爬虫抓取、静态资源未缓存。
第五步,如果是未知进程占用高,检查是否被植入挖矿木马。用ps aux查看进程路径,用ls -l /proc/进程ID/exe查看可执行文件。发现可疑进程立即杀掉,并排查入侵来源。
第六步,如果是CC攻击,配置Nginx限流和iptables规则。关于限流配置的方法,可以参考云服务器怎么限流一文中关于Nginx和防火墙的说明。
六、常见故障对照表
| 症状 | 可能原因 | 排查方向 |
|---|---|---|
| 网站打不开 | 服务器宕机、端口未开、Nginx未运行、备案未过 | 网络→服务→备案 |
| 响应慢 | CPU跑满、内存不足、磁盘IO高、带宽跑满 | 资源监控→应用日志 |
| 数据库连不上 | MySQL未运行、端口未开、密码错误、权限不足 | 服务→端口→权限 |
| CPU跑满 | PHP慢、MySQL慢、CC攻击、挖矿木马 | 进程→日志→安全 |
| 磁盘写满 | 日志未清理、备份文件堆积、临时文件未清理 | df→du→清理 |
| 502错误 | PHP-FPM未运行、进程数不足、超时 | PHP-FPM状态→日志 |
| 504错误 | 后端响应超时、数据库慢查询 | Nginx超时配置→应用日志 |
七、故障排查的注意事项
第一是先止损再排查。故障发生时,优先恢复业务,再分析原因。比如重启服务、切换备用节点,先让用户能用。
第二是保留现场。排查前先保存日志、截图、进程列表,避免重启后现场丢失,影响定位。
第三是记录过程。每次故障记录排查过程和解决方案,形成知识库。同类问题再次发生时可以快速处理。
第四是复盘。故障处理后做复盘,分析根本原因,制定预防措施。比如优化代码、调整配置、增加监控。
第五是不要盲目重启。重启可以临时恢复服务,但根本问题没解决。建议先定位原因,再决定是否重启。关于服务器监控的配置,可以参考云服务器怎么监控一文中关于CPU、内存、带宽、磁盘监控的说明。
八、小结
云服务器故障排查的核心是分层定位。从网络到服务到资源到应用到安全,逐层排除。网站打不开查网络、服务、备案;响应慢查CPU、内存、磁盘、带宽;数据库连不上查服务、端口、权限;CPU跑满查进程、日志、安全。排查时先止损再分析,保留现场,记录过程,事后复盘。厦门电信100G防御机房适合对稳定性有要求的业务,配合监控和排查流程可以快速恢复故障。