【问题标题】:Semaphore error logged in mobicents sip servletmobicents sip servlet 中记录的信号量错误
【发布时间】:2015-12-23 11:09:09
【问题描述】:

我们有一个针对 Mobicents SIP Servlet 编写的应用程序,目前使用的是 v2.1.547,但我也针对 v3.1.633 进行了测试,并注意到了相同的行为。

我们的应用程序作为 B2BUA 工作,我们有一个传入的 SIP 呼叫,我们还有一个出站 SIP 呼叫被放置到正在执行 VXML 的 MRF。这两个 SIP 调用与单个 SipApplicationSession 相关联 - 这是我们配置的并发模型。

100% 的时间重新创建的场景如下:

  • 向我们的应用程序发出的呼入电话(未接听电话)
  • 向 MRF 发出的呼出电话
  • 呼入电话挂断
  • 应用程序尝试终止与出站呼叫关联的 SipSession

我看到这个被记录了:

2015-12-17 09:53:56,771 WARN [SipApplicationSessionImpl] (MSS-Executor-Thread-14) 无法获取会话信号量 java.util.concurrent.Semaphore@55fcc0cb[Permits = 0] 30 秒。无论如何,我们都会解锁信号量,因为事务即将超时。这也可能是并发控制风险。应用会话是5faf5a3a-6a83-4f23-a30a-57d3eff3281c;SipController

我愿意相信我们的应用程序可能会以某种方式触发此行为,但目前我不知道是如何触发的。我会认为获取/释放信号量都是实现内部的,所以它应该确保某些东西不会获取信号量并且永远不会释放它?

任何关于如何深入了解的指针将不胜感激,因为我说过它是 100% 可重复的,因此获取日志等都是可能的。

【问题讨论】:

    标签: mobicents mobicents-sip-servlets sip-servlet


    【解决方案1】:

    如果不查看有关您如何访问和安排要发送的消息的任何日志或应用程序代码,很难判断。但是,如果您以异步方式使用相同的 SipApplicationSession,您可能需要使用我们供应商特定的异步 API https://mobicents.ci.cloudbees.com/job/MobicentsSipServlets-Release/lastSuccessfulBuild/artifact/documentation/jsr289-extensions-apidocs/org/mobicents/javax/servlet/sip/SipSessionsUtilExt.html#scheduleAsynchronousWork(java.lang.String,%20org.mobicents.javax.servlet.sip.SipApplicationSessionAsynchronousWork),这将保证对 SipapplicationSession 的访问是序列化的并避免任何并发问题。

    【讨论】:

    • 感谢@jeand 的回复。
    • 我已经从这个事件中获取了一个日志文件,你可以从这里获取:link 信号量被获取并且在出现后没有快速释放的点出现在这里:>2015-12-23 14:50:43,627 DEBUG [SipStandardContext] (http-bio-8000-exec-5) 获取 sipApplicationSession=262ffec0-d389-4cba-9468-f8500ec865d8;SipController 因为它不存在于我们访问的 sip 应用程序会话的本地线程中指出我们的应用程序似乎只从会话中获取值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多