我们有 120 多个使用 PJSIP 的客户通过蜂窝网络呼叫 Freeswitch 服务器中的同一会议室。Freeswitch 接受客户端的第一个 INVITE,然后发回身份验证挑战。由于第二个 INVITE 数据包大小 > 1300,PJSIP 使用 TCP 中的代理身份验证发送第二个 INVITE。对于 60% 以上的调用,Freeswitch 服务器正在关闭 TCP 连接。一个wireshark跟踪转储看起来像:
- 来自客户:邀请
- 来自服务器:100 次尝试
- 从服务器:需要 407 代理身份验证
- 来自客户端:ACK PJSIP 确认 UDP 上的第一个 INVITE
- 来自客户:SYN
- 来自 FS:SYN,ACK
- 来自客户端:ACK
- 来自 FS:FIN,ACK
- 来自客户端:ACK
- 来自客户端:[重新组装的 PDU 的 TCP 段]
- 来自客户端:INVITE - 使用代理身份验证
- 来自 FS:RST,ACK
- 来自 FS:RST
呼叫失败 - Freeswitch 没有收到第二个邀请,因为连接已关闭。无法弄清楚服务器关闭连接的原因。它看起来几乎是随机的。当电话开始进入一些客户时,一些客户却没有。这不仅仅是前50个左右。在通话期间,服务器 cpu 达到大约 60%。通话可持续约 4 分钟。
Freeswitch 日志不显示 TCP 故障。我设置了以下内容:
在 \FreeSwitch\conf\sip_profiles\internal.xml
<param name="debug" value="9"/>
<param name="sip-trace" value="on/>
在 \FreeSwitch\conf\autoload_configs\sofia.conf.xml
<param name="log-level" value="9"/>
<param name="tracelevel" value="DEBUG"/>
120 位客户中约有 50 位拨打了电话。如果失败,客户端将定期继续尝试加入呼叫,直到达到某个指定的呼叫结束计时器。
服务器是 Windows Server 2008 R2 标准 64 位 8Gb 2 2.6Ghz procs
任何有关如何继续解决此问题的帮助将不胜感激。娄