公网ip连接导致的网站响应慢

最近由于服务器跑的任务量多了,对数据库的查询也多了,网站突然变的很慢。

使用的是腾讯云低配服务器,担心可能是数据库负载太高,又或者是被攻击了。

最近经过排查,发现腾讯云后台显示带宽一直是打满的,我关掉自己发服务就马上缓解,于是基本判断是自身服务问题,导致带宽流量打满。

但自己评估,服务访问人数很少,不至于打满。开始和AI 一起排查。

# 实时监控带宽(按流量排序)
sudo iftop -P -i eth0

发现了大量来自我自己的流量。

流量集中在这一个 IP 上,而且带宽累计已经达到了:

  • TX (上传):60.7MB
  • RX (下载):2.01MB
  • 总流量:62.7MB

当前实时速率显示上传速率接近 9.3Mb(即大约 1MB/s 左右),可能是你带宽上限附近,尤其如果你的带宽是 10Mbps 左右的小型 VPS。

后来我意识到VM-4-12-ubuntu:27027 和 111.201.131.102 是在同一台服务器上的服务,为什么还计算公网流量?

原因在于我 mongodb://xxx.xx.xx.xx:27027,使用了公网 IP。

系统会认为我在访问一台「外部主机」;

实际上流量会通过外部网卡(比如 eth0),形成一个**”NAT 回环”**(外出再回来的包);

云服务商和我的网卡都看到了上传/下载数据,自然计入了公网 TX/RX 流量

也就导致了我现在的 带宽被吃满、网速变慢 的情况。

修改方法也很简单,在服务器上使用127.0.0.1。为了在本地使用公网ip 连接,可以

const os = require('os');
const hostname = os.hostname();

const isTencentCloud = hostname.includes('VM-') || hostname.includes('tencent');

const mongoUri = isTencentCloud
  ? 'mongodb://127.0.0.1:27017'
  : 'mongodb://xxx.xxx.xxx.xxx:27017';

Leave a Comment

邮箱地址不会被公开。 必填项已用*标注