首先确认是本地到目标的网络问题还是VPS内部问题。常用步骤包括:
使用 ping、traceroute 或 mtr 对目标 IP/域名进行探测,观察丢包率与跃点延迟;如果在越南CN2链路中出现跃点丢包或高延迟,可能为链路质量或ISP策略问题。
使用 ping 带大小参数(如 ping -M do -s 1472)测试路径 MTU,防止分片导致断连或不稳定。
在VPS上执行:ss -tuln 或 netstat -tuln 确认服务监听端口;使用 iptables -S 或 nft list ruleset 检查防火墙规则是否阻断。
从外网或第三方连通性检测(如 telnet ip port 或 nmap)尝试连接目标端口;如果国内可达而国外不可达,可能是公网出口被ISP限流或黑洞路由。
使用 traceroute --tcp 或利用 bgp.he.net 等在线工具检查BGP路由,确认是否存在不正常的路径选择或中间ASN丢包。
先查看系统日志:journalctl -xe、/var/log/messages、dmesg,查找网卡驱动、硬件中断或内核 panic 信息;同时检查 ifconfig/ip -s link 看网卡错误计数(RX/TX errors、dropped)。
使用 top、htop、iostat、sar 查看 CPU、内存、磁盘 IO 是否成为瓶颈;高负载可能导致响应变慢,表现为丢包或连接超时。
下面给出三个简化示例:Bash 心跳检测与重启、systemd 服务自动重启单元、以及 Ansible 检测任务。
# Bash 定时检查 nginx 并重启示例
#!/bin/bash
if ! ss -tuln | grep -q ':80'; then
systemctl restart nginx
echo "$(date): nginx restarted" >> /var/log/auto-recover.log
fi
# systemd 服务自动重启示例(/etc/systemd/system/auto-watch.service)
[Unit]
Description=Auto Watch Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/auto-watch.sh
Restart=no
[Install]
WantedBy=multi-user.target
# Ansible 检查主机可达并收集网络信息(示例任务)
- hosts: vps
gather_facts: no
tasks:
- name: ping host
ping:
- name: run traceroute
shell: traceroute -n 8.8.8.8 -w 1 -q 1
register: tr
- debug: var=tr.stdout
建议结合主动探测与被动监控:主动探测(外部端到端 ping/mtr、端口检测)能及时发现链路质量问题;被动监控(Prometheus + node_exporter、Grafana)收集主机与服务指标。
配置基于阈值告警(丢包率、RTT、CPU、内存、磁盘IO)并通过 webhook /钉钉 /邮件推送;结合上文自动化脚本实现自动恢复(重启服务、调整路由或通知运维)。
定期保留链路检测记录,若发现CN2链路在特定ASN或时段稳定性差,应与带宽提供商或IDC沟通做路由优化或改用备份出口。