如何解决为什么 EventDispatcher 被阻塞
在我们的应用程序中,我在进行性能测试时看到下面的堆栈跟踪。 HTTP 调用 /content/myproduct.product-details.json 执行多次。
"10.43.0.54 [1622796489658] GET /content/myproduct.product-details.json HTTP/1.1" #38568
prio=5 os_prio=0 cpu=1873.84ms elapsed=520.13s tid=0x00007f9d40ec3800 nid=0xe20 waiting
for monitor entry [0x00007f9d10dd7000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.felix.framework.EventDispatcher.updateListener(EventDispatcher.java:397)
- waiting to lock <0x00000007143ec440> (a org.apache.felix.framework.EventDispatcher)
at org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:183)
at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3615)
at org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:297)
- locked <0x00000007bce37348> (a org.osgi.util.tracker.ServiceTracker$Tracked)
- locked <0x00000007bce372a8> (a org.osgi.util.tracker.ServiceTracker)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:264)
at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:160)
at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:112)
at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:107)
at org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:197)
at org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:145)
at org.apache.jackrabbit.oak.security.user.UserConfigurationImpl.getBlobAccessProvider(UserConfigurationImpl.java:276)
at org.apache.jackrabbit.oak.security.user.UserConfigurationImpl.getUserManager(UserConfigurationImpl.java:251)
at org.apache.jackrabbit.oak.security.authentication.token.TokenProviderImpl. (TokenProviderImpl.java:138)
at org.apache.jackrabbit.oak.security.authentication.token.TokenConfigurationImpl.getTokenProvider(TokenConfigurationImpl.java:162)
at org.apache.jackrabbit.oak.spi.security.authentication.token.CompositeTokenConfiguration$1.apply(CompositeTokenConfiguration.java:46)
at org.apache.jackrabbit.oak.spi.security.authentication.token.CompositeTokenConfiguration$1.apply(CompositeTokenConfiguration.java:43)
servlet (/content/myproduct.product-details.json) 试图通过在每个请求上创建服务资源解析器对象来获取产品详细信息。根据我的理解,每次当我获得服务资源解析器对象时,都会执行一个资源解析器线程,在此过程中,OSGI 容器需要知道如何按照白板模式与不同的包进行通信。并且因为这个 HTTP 线程等待锁定 org.apache.felix.framework.EventDispatcher 对象。
能否请您告诉我我的理解是否正确? 为什么 HTTP 线程无法获取 EventDispatcher 对象上的锁?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。