服务器带宽:100M独享
事件:收到云监控报警 联通线路 访问丢包
ping 服务器网关正常
ping 服务器IP超时丢包
奇怪现象:同一出口ping
linux 客户端 ping 服务器 不会超时丢包
windows 客户端 ping 服务器 则会超时丢包
原因是服务器带宽跑满了 导致丢包
排除内网网段 查看实时网络情况
iftop -f "not net 192.168.1.0/24" -i bond0 -n
找出占用带宽IP 进程
$ ss -ntep | grep 222.217.94.111
SYN-SENT 0 1 120.33.66.133:64018 222.217.94.111:443 users:(("php",pid=62599,fd=14)) timer:(on,124ms,0) uid:1001 ino:900979165 sk
通过pid 查看进程 详情
$ ss -ntep | grep 222.217.94.111 | awk -F '=' '{print $2}' | awk -F ',' '{print $1}' | while read -r pid; do ps -ef | grep -v grep | grep "$pid"; done
root 56276 26604 0 13:17 pts/3 00:00:00 grep --color=auto 62599
www 62599 62598 0 Jan22 ? 00:02:03 /usr/local/webserver/php7/bin/php artisan sundayhk:upload_user_avatar
查看代码及日志发现是,同时多次请求CDN上的5M图片,带宽跑满,导致丢包。
这里100M独享 理论最高下载速率为12.5M。 100M / 8=12.5M
若没控制好频率,多个进程同时下载5M的图片,其实同一时间下载2个5M文件就已经服务器带宽刷满,此时就会导致其他网络请求丢包。
这里的CDN源站其实也在此服务器上,不过没走内网,走公网取CDN的图片,把服务器自己的带宽干拿倒了。
解决:服务器内部设置DNS解析走内网IP
哈哈,这回是被自己人干倒了。