【问题标题】:Jacorb hangs to respond to a remote API callJacorb 挂起以响应远程 API 调用
【发布时间】:2016-12-14 18:03:40
【问题描述】:

我们使用 Corba 的 Jacorb 2.2.3 实现。大多数情况下一切正常,在某些并发场景中,Jacorb 在调用 Corba 服务器对象上的 API 时会间歇性地挂起。

我尝试通过调整 Jacorb.properties 来重新创建它。甚至尝试在服务器端使用封闭对象但徒劳无功。

从服务器线程转储中观察到,Jacorb 用来处理并发请求的 RequestProcessor 线程被锁定,如下所示

"RequestProcessor-26" ... nid=0x25cc in Object.wait() [0x000000004237f000]                
    java.lang.Thread.State: WAITING (on object monitor)   
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at org.jacorb.poa.RequestProcessor.run(RequestProcessor.java:700)
    - locked <0x0000000150714178> (a org.jacorb.poa.RequestProcessor)

"RequestProcessor-25" ...nid=0x3250 in Object.wait() [0x000000004227f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:502)
    at org.jacorb.poa.RequestProcessor.run(RequestProcessor.java:700)
    - locked <0x0000000150e90748> (a org.jacorb.poa.RequestProcessor)

我正在寻找两件事

  1. Jacorb 2.2.3 中是否存在任何已知问题,即客户端在调用服务器端对象上的 API 时会进入挂起状态?
  2. 我尝试通过启动多个并发会话来重新创建 RequestProcessor 的锁定状态,但我没有在线程转储中看到 RequestProcessor 的“锁定”状态

【问题讨论】:

  • 有什么理由不使用 JacORB 3?甚至是最新的?
  • @tuergeist 是的,这是因为生产环境和升级jar 必须等待处理和批准。所以想知道是否有一致的步骤在 2.2.3 上重新创建它,以便可以将其推送到 3.8 或届时将是最新的任何东西
  • @Kiran 您是否尝试增加服务器上的工作线程数?此外,如果服务器对象都在等待同一个对象,则它们的实现可能会导致这种锁定。
  • 是的,将其视为一种解决方法,它可以工作。但想知道这里是否存在已知问题

标签: java multithreading corba jacorb


【解决方案1】:

自该版本的 JacORB 以来已进行了多项修复。一些已经围绕同步代码。当前版本是 3.8 ;我建议您尝试重现您的问题。您可能会发现 http://www.jacorb.org/contact.html 对报告 JacORB 问题很有用

【讨论】:

  • 我同意这个问题在 3.8 上可能看不到,但由于内部原因,它不能立即升级。所以想知道是否有一致的步骤在 2.2.3 上重新创建它,以便可以在有正当理由的情况下将其推送到 3.8
  • 2.2.3 于 2005 年 12 月发布,因此与 2016 年 7 月发布的 3.8 相比已经相当老了。如果您有一个可重现的测试用例可以尝试,那将会有所帮助。或者,您可以尝试使用byteman.jboss.org 来帮助监控/触发您的场景。
  • 不幸的是,我无法想出固定的步骤来重新创建它
猜你喜欢
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 2014-08-22
  • 2014-02-02
相关资源
最近更新 更多