故障排除指南
常见问题和解决方案
本指南收集了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:
- 进入单用户模式
- 检查文件系统
- 修复配置文件
- 重启系统
忘记root密码
重置密码步骤:
- 通过控制面板重装系统
- 或使用救援模式重置密码
数据恢复
# 从备份恢复
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