调查一些通话质量问题(通话中的 0.5 – 1 秒死角) 我对同一 PBX 上的两个分机之间的电话通话进行了数据包捕获。由于我是从 PBX 捕获的,我很惊讶地看到 Wireshark 报告了一个巨大的抖动峰值,与通话中的死点同步:
我的理解是抖动是由数据包丢失和/或传输中的延迟引起的,离开 PBX 的 RTP 流应该是相对原始的。但是这个峰值出现在所有四个 RTP 流中(办公室 1 到 PBX、办公室 2 到 PBX、PBX 到办公室 1、PBX 到办公室 2),所以看起来数据包在离开服务器时已经很糟糕了。
PBX 是 Scientific Linux (RHEL) 6.9 上的 Asterisk 13(在 VMWare ESXi 5.5 客户机上运行,带有新更新的工具和 VMXNET3 适配器。)CPU 的使用率稳定在 5-15% 左右,网络流量极小。我在哪里可以解决此问题?此类问题是否有任何常见原因?我假设由于服务器上存在问题,我可以排除外部网络端的问题吗?
终于想通了!TLDR:禁用主机上的电源管理。
尽管 CPU 使用率很低,但我们仍然认为这与 CPU 负载有关。因此,我们正在尝试降低 CPU 的负载,预计调用中的死点问题会变得更糟。相反,它完全消失了。因此,在多次查看 vCenter 中的 CPU 使用情况统计信息后,我终于查看了该图上的另一条线。
这对很多人来说可能不是新闻,但我发现CPU 就绪时间是 VM 准备好使用 CPU 的时间量,但主机无法分配物理资源。我发现的大多数消息来源都说低于 5% 的任何东西都不是问题,但它确实似乎对我们的语音流产生了影响。我们每分钟都在看到剪裁,而且图表还显示每分钟的准备时间都有一个高峰。
所以我想知道为什么这会在高 CPU 负载时消失,并认为它一定是某种电源管理。当主机看到使用率增加时,它会使 CPU 资源始终可用于 VM。所以我在主机的 BIOS 中禁用了电源管理,等等:
接近图表末尾的就绪时间略有增加,对应于迁移回该主机的其他六台虚拟机。
呼叫跟踪现在显示的抖动量可以忽略不计,并且切口已从呼叫中消失。进一步的研究表明,对于延迟敏感和 CPU 非密集型工作负载来说,这是一个比较常见的问题。电源管理看到非常低的 CPU 使用率并假设它可以限制处理器,即使它不应该!
我遇到了类似的问题,但更糟糕的是,Wireshark RTP 图表中有许多尖峰、嘶嘶声和断断续续的音频。
在许多实验过程中,我转储了已增长到 1.5GB的CDR 数据库。我注意到了它的大小,但在解决音频问题之前一直在推迟修剪。B-)
这显然立即提高了音频质量,包括将 IVR 消息转码为 G729。
从到 VPS 的SmokePing跟踪中也可以看到延迟。