故障排除指南

常见问题和解决方案

本指南收集了VPS使用过程中的常见问题和解决方案。

连接问题

无法SSH连接

症状: SSH连接超时或被拒绝

可能原因和解决方案:

# 1. 检查服务器状态
# 在控制面板查看服务器是否在线

# 2. 检查SSH服务
systemctl status sshd
systemctl start sshd

# 3. 检查防火墙
ufw status
ufw allow ssh

# 4. 检查SSH配置
vim /etc/ssh/sshd_config
# 确认 Port 22 和 PermitRootLogin yes

# 5. 重启SSH服务
systemctl restart sshd

网站无法访问

症状: 浏览器显示”无法访问此网站”

排查步骤:

# 1. 检查web服务器状态
systemctl status apache2  # 或 nginx
systemctl start apache2

# 2. 检查端口监听
netstat -tuln | grep :80
netstat -tuln | grep :443

# 3. 检查防火墙
ufw allow 'Apache Full'  # 或 'Nginx Full'

# 4. 检查DNS解析
nslookup your-domain.com
dig your-domain.com

# 5. 测试本地访问
curl -I http://localhost

性能问题

服务器响应慢

症状: 网站加载缓慢,SSH连接延迟

诊断和解决:

# 1. 检查系统负载
top
htop
uptime

# 2. 检查内存使用
free -h
ps aux --sort=-%mem | head

# 3. 检查磁盘I/O
iostat -x 1
iotop

# 4. 检查网络
ping -c 4 8.8.8.8
traceroute 8.8.8.8

# 5. 清理系统
apt autoremove
apt autoclean

内存不足

症状: 系统卡顿,进程被杀死

解决方案:

# 1. 查看内存使用
free -h
cat /proc/meminfo

# 2. 找出占用内存最多的进程
ps aux --sort=-%mem | head -10

# 3. 增加swap空间
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 4. 永久启用swap
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# 5. 优化swap使用
echo 'vm.swappiness=10' >> /etc/sysctl.conf

服务问题

Apache无法启动

常见错误和解决方案:

# 1. 端口被占用
netstat -tuln | grep :80
# 停止占用端口的进程

# 2. 配置文件错误
apache2ctl configtest
# 根据错误信息修复配置

# 3. 权限问题
chown -R www-data:www-data /var/www/
chmod -R 755 /var/www/

# 4. 查看错误日志
tail -f /var/log/apache2/error.log

MySQL无法启动

排查步骤:

# 1. 查看错误日志
tail -f /var/log/mysql/error.log

# 2. 检查磁盘空间
df -h

# 3. 检查权限
chown -R mysql:mysql /var/lib/mysql/

# 4. 修复数据库
mysqld --user=mysql --skip-grant-tables --skip-networking &
mysql -u root
FLUSH PRIVILEGES;

磁盘问题

磁盘空间不足

症状: 系统提示”No space left on device”

解决步骤:

# 1. 查看磁盘使用情况
df -h

# 2. 找出占用空间最大的目录
du -sh /* | sort -hr
du -sh /var/log/*

# 3. 清理日志文件
find /var/log -name "*.log" -mtime +30 -delete
journalctl --vacuum-time=7d

# 4. 清理包缓存
apt clean
yum clean all

# 5. 清理临时文件
rm -rf /tmp/*
rm -rf /var/tmp/*

磁盘I/O过高

诊断方法:

# 1. 查看I/O统计
iostat -x 1

# 2. 找出I/O占用高的进程
iotop -o

# 3. 检查磁盘健康
smartctl -a /dev/sda

# 4. 优化I/O调度
echo deadline > /sys/block/sda/queue/scheduler

网络问题

DNS解析问题

症状: 域名无法解析或解析错误

解决方案:

# 1. 检查DNS配置
cat /etc/resolv.conf

# 2. 测试DNS解析
nslookup google.com
dig google.com

# 3. 更换DNS服务器
echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

# 4. 清理DNS缓存
systemctl restart systemd-resolved

网络连接异常

排查网络问题:

# 1. 检查网络接口
ip addr show
ifconfig

# 2. 检查路由表
ip route show
route -n

# 3. 测试网络连通性
ping -c 4 8.8.8.8
traceroute 8.8.8.8

# 4. 检查网络统计
netstat -i
cat /proc/net/dev

安全问题

发现异常登录

应急处理:

# 1. 查看登录日志
tail -f /var/log/auth.log
last

# 2. 查看当前登录用户
who
w

# 3. 强制断开可疑连接
pkill -u suspicious_user

# 4. 更改密码
passwd root
passwd username

# 5. 加强SSH安全
vim /etc/ssh/sshd_config
# 修改端口、禁用密码登录等

系统被入侵

紧急响应:

# 1. 断网隔离
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# 2. 检查异常进程
ps aux | grep -v "\["
top

# 3. 检查网络连接
netstat -tuln
ss -tuln

# 4. 检查系统文件
find / -name "*.php" -mtime -1
find /tmp -type f -executable

# 5. 备份重要数据后重装系统

日志分析

系统日志

# 查看系统日志
journalctl -f
tail -f /var/log/syslog

# 查看特定服务日志
journalctl -u apache2
journalctl -u mysql

# 查看启动日志
dmesg | tail

Web服务器日志

# Apache日志
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log

# Nginx日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

# 分析访问日志
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head

紧急恢复

系统无法启动

通过控制面板VNC:

  1. 进入单用户模式
  2. 检查文件系统
  3. 修复配置文件
  4. 重启系统

忘记root密码

重置密码步骤:

  1. 通过控制面板重装系统
  2. 或使用救援模式重置密码

数据恢复

# 从备份恢复
tar -xzf backup.tar.gz -C /

# 数据库恢复
mysql -u root -p < database_backup.sql

# 文件权限修复
chown -R www-data:www-data /var/www/
chmod -R 755 /var/www/

预防措施

定期维护

# 系统更新
apt update && apt upgrade

# 清理系统
apt autoremove
apt autoclean

# 检查磁盘
fsck /dev/sda1

# 备份重要数据
tar -czf backup_$(date +%Y%m%d).tar.gz /var/www /etc

监控设置

# 设置监控脚本
crontab -e

# 每小时检查系统状态
0 * * * * /root/system_check.sh

# 每日备份
0 2 * * * /root/backup.sh