故障排查的基本方法
DMIT 云服务器遇到问题时,系统化的排查方法比随机尝试更有效。本文按常见故障类型提供排查流程,帮助你快速定位和解决问题。
核心原则:先看日志,再看资源,最后改配置。
SSH 连接问题
无法 SSH 登录
排查步骤:
# 1. 检查网络可达性
ping <server_ip>
# 2. 检查端口是否开放
nc -zv <server_ip> 22
# 3. 如果端口不通,通过 DMIT 控制面板的 VNC/Console 登录
# 4. 检查 SSH 服务状态
systemctl status sshd
# 5. 检查 SSH 配置
grep -E "Port|PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config
# 6. 检查防火墙
iptables -L -n | grep 22
ufw status
# 7. 查看 SSH 日志
journalctl -u sshd --since "1 hour ago" -n 50
常见原因:防火墙规则变更、SSH 端口修改后未放行、密钥配置错误。
SSH 登录慢
# 常见原因:DNS 反向解析超时
# 编辑 /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication no
# 重启 SSH
systemctl restart sshd
Web 服务问题
502 Bad Gateway
Nginx 无法连接到后端服务:
# 1. 检查后端服务是否运行
systemctl status your-app
ps aux | grep your-app
# 2. 检查后端端口是否监听
ss -tlnp | grep :3000 # 假设后端端口 3000
# 3. 检查 Nginx 错误日志
tail -20 /var/log/nginx/error.log
# 4. 手动测试后端
curl -I http://127.0.0.1:3000
# 5. 检查 Nginx upstream 配置
grep -A5 "upstream" /etc/nginx/sites-enabled/*
504 Gateway Timeout
后端响应超时:
# 增加 Nginx 超时
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 或优化后端处理速度
# 检查后端是否有死循环或慢查询
403 Forbidden
# 检查文件权限
ls -la /var/www/
# Web 服务器用户需要读取权限
chown -R www-data:www-data /var/www/
find /var/www/ -type d -exec chmod 755 {} \;
find /var/www/ -type f -exec chmod 644 {} \;
# 检查 Nginx 配置中的 deny 指令
grep -r "deny" /etc/nginx/
数据库问题
连接数超限
# MySQL
mysql -e "SHOW VARIABLES LIKE 'max_connections'"
mysql -e "SHOW STATUS LIKE 'Threads_connected'"
# 查看连接来源
mysql -e "SHOW PROCESSLIST" | awk '{print $3}' | sort | uniq -c | sort -rn
# PostgreSQL
psql -c "SELECT count(*) FROM pg_stat_activity"
psql -c "SELECT state, count(*) FROM pg_stat_activity GROUP BY state"
查询慢
# MySQL 慢查询日志
grep long_query_time /etc/mysql/*.cnf
tail -20 /var/log/mysql/slow.log
# 开启慢查询日志(如未开启)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
# PostgreSQL 慢查询
# 编辑 postgresql.conf
log_min_duration_statement = 1000 # 记录 >1s 的查询
# 分析慢查询
EXPLAIN ANALYZE SELECT ...;
磁盘问题
磁盘空间不足
# 查看磁盘使用
df -h
# 找出大文件/目录
du -sh /* 2>/dev/null | sort -rh | head -10
du -sh /var/* 2>/dev/null | sort -rh | head -10
# 清理常见空间占用
journalctl --vacuum-size=500M # systemd 日志
apt clean # APT 缓存
find /var/log -name "*.gz" -mtime +30 -delete # 旧日志
Inode 耗尽
# 查看 inode 使用
df -i
# 找出小文件最多的目录
find / -xdev -type f | cut -d/ -f2 | sort | uniq -c | sort -rn | head
网络问题
服务外部不可达
# 1. 检查服务是否监听 0.0.0.0(而非仅 127.0.0.1)
ss -tlnp | grep :80
# 2. 检查防火墙
ufw status
iptables -L -n
# 3. 检查 DMIT 安全组(如有)
# 4. 从外部测试
curl -I http://<server_ip>:80
DNS 解析失败
# 检查 DNS 配置
cat /etc/resolv.conf
# 测试解析
nslookup example.com
dig example.com
# 如果 DNS 不可用,临时使用公共 DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
性能问题排查
系统卡顿
# 查看 CPU/内存/负载
top -b -n1 | head -5
# 查看 I/O 等待
top -b -n1 | grep "%Cpu" | awk '{print "I/O wait: " $8}'
# 找出占用资源最多的进程
ps aux --sort=-%cpu | head -5
ps aux --sort=-%mem | head -5
更多性能调优方法见《性能调优指南》。
OOM(内存不足)问题
# 查看 OOM 记录
dmesg | grep -i "out of memory"
dmesg | grep -i "oom killer"
# 查看被杀的进程
journalctl --since "1 hour ago" | grep -i "killed process"
# 解决方案:
# 1. 增加交换空间
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 2. 优化应用内存使用
# 3. 升级到更高内存的套餐
排查检查清单
| 问题 | 第一步 | 关键命令 |
|---|---|---|
| SSH 不通 | ping + nc | systemctl status sshd |
| 502 | 检查后端服务 | ss -tlnp + nginx error log |
| 504 | 检查后端响应时间 | nginx error log + 后端日志 |
| 403 | 检查权限 | ls -la + chown/chmod |
| DB 连接超限 | 查看连接数 | SHOW PROCESSLIST / pg_stat_activity |
| 磁盘满 | df -h | du -sh + 清理日志/缓存 |
| 服务不可达 | 检查监听 + 防火墙 | ss -tlnp + ufw status |
| OOM | dmesg grep oom | 加 swap 或升级套餐 |
| 系统卡顿 | top | ps aux --sort=-%cpu |
相关文章:《SSH 安全加固》、IPv6 配置教程、《监控与备份》、《初次部署检查清单》。
本文核对日期:2026-08-18。排查命令以你的系统版本为准。