Kamailio 使用率非常高,即使用户数量很少

Kamailio Usage very high even with small number of users

我在使用 Kamailio 时遇到了一个非常奇怪的问题,我们的 Azure VM 是具有 2 个内核和 7 GB RAM 的 D2 配置,Ubuntu 14.04 LTS,一整天我们都看到了高CPU 来自 Kamailio 的用法,我们间歇性地面临 Kamailio 停止接受新注册的问题。当我检查位置 table 或通过 kamctl ul show 时,它只显示大约 900 多个用户。但是 Kamailio 仍然无法接受新注册,因为 user.I 相信 Kamailio 每个核心可以处理 350000 个用户。另外 tcp_connections 位于 tcp_max_connection = 60000,我收到以下错误:

Feb 4 01:02:21 urcmcs /usr/local/sbin/kamailio[1956]: ERROR: [tcp_read.c:299]: tcp_read_data(): error reading: Connection timed out (110) Feb 4 01:02:21 urcmcs /usr/local/sbin/kamailio[1956]: ERROR: [tcp_read.c:1326]: tcp_read_req(): ERROR: tcp_read_req: error reading Feb 4 01:02:42 urcmcs /usr/local/sbin/kamailio[1969]: ERROR: [tcp_read.c:299]: tcp_read_data(): error reading: Connection timed out (110) Feb 4 01:02:42 urcmcs /usr/local/sbin/kamailio[1969]: ERROR: [tcp_read.c:1326]: tcp_read_req(): ERROR: tcp_read_req: error reading Feb 4 01:02:54 urcmcs /usr/local/sbin/kamailio[1959]: ERROR: [tcp_read.c:299]: tcp_read_data(): error reading: Connection timed out (110) Feb 4 01:02:54 urcmcs /usr/local/sbin/kamailio[1959]: ERROR: [tcp_read.c:1326]: tcp_read_req(): ERROR: tcp_read_req: error reading

到处找都找不到解决办法...

错误表明 tcp 连接断开并且读取超时。

Kamailio 似乎无法处理流量时的故障排除方法:

  • 确保您没有进行数据包限制的状态防火墙(例如 selinux)
  • 使用 sipsak 或 sipp 从同一台服务器发送一个数据包,看看是否有响应——这应该可以排除网络问题
  • 使用 gdb 附加到 kamailio 进程并查看它们在做什么:gdb /path/to/kamailio PID。您可以使用 'kamctl ps' 查看 kamailio 进程及其角色的 PID。
  • 如果你这样做 'top' 并且某些 kamailio 进程正在使用大量 cpu,请先使用上述 gdb 调查它们

我终于找到了问题,Ubuntu 内核 3.19.0-28-generic 已知在网络性能方面存在一些问题。这导致了非常高的使用率和连接问题。更新内核到最新解决了问题。