问题描述

稳定运行几个月的外呼系统, 最近突然开始卡顿, 不仅在高并发的时候卡顿, 在没有并发的情况下,同样卡顿。
在排除了系统本身的问题后, 怀疑是网络问题, 下面是定位的一些步骤。

定位方法

  1. 在外网搭建一台freeswitch,用于模拟线路服务器
  2. 当前的外呼系统将呼叫送到该服务器
  3. 同时在外呼系统和模拟线路服务器上面抓包
  4. 在外呼系统上面,当接通的时候,启动ping,ping模拟线路服务器

发送方ping对端服务器

在接通后,开始ping特定的外网地址,每秒输出一个ping的结果,如下图所示:
image.png
粗略统计, 在接通后14秒和44秒的時候, 网络发生波动。

发送方抓包

下面是wireshark播放时的波形图:
image.png
从图上来看, 发送方送出去的波形是完整的, 没有任何丢包和错误的点。

接收方抓包

下面是wireshark播放时的波形图:
image.png
可以看到在差不多14秒和44秒的位置, 都有比较大的卡顿。
因为波形比较密集,放大之后,14秒卡顿的点,其实是由多个错误的点组成。
image.png

结论

  1. 网络存在间歇性的剧烈抖动
  2. 网络间歇性抖动造成外呼系统送出去的rtp包乱序和丢失

在和运维沟通后, 发现最近他们开启了阿里云的云防火墙功能,特性如下:
image.png
云防火墙会控制入流量和出流量,实时通讯的流量大,也没有监控的意义, 不适用于云防火墙。

在将云防火墙关闭后, 系统恢复正常。