在我的应用程序中,JAXB用于消息解析,它是基于XML请求/响应的RESTFUL应用程序。
我正在观察JAXB的性能问题,这个问题不一致,很难重现。
然而,我能够在性能测试期间在我们的测试环境中重现它。我在Dynatrace中观察到,来自cxf-rt-frontend-jaxrs-2.7.10-sources.jar的AbstractJAXBProvider.java的JAXB方法被阻塞了1到2秒。它发生在20个同时发出的请求中,所有20个线程在此方法上被阻止1到2秒。
@SuppressWarnings("unchecked")
public JAXBContext getJAXBContext(Class<?> type, Type genericType) throws JAXBException {
if (mc != null) {
ContextResolver<JAXBContext> resolver =
mc.getResolver(ContextResolver.class, JAXBContext.class);
if (resolver != null) {
JAXBContext customContext = resolver.getContext(type);
if (customContext != null) {
return customContext;
}
}
}
synchronized (classContexts) {
JAXBContext context = classContexts.get(type);
if (context != null) {
return context;
}
}
JAXBContext context = getPackageContext(type, genericType);
return context != null ? context : getClassContext(type, genericType);
}
是否有办法避免这种瓶颈,因此在高度并发的请求下,性能不会受到影响。
非常感谢任何帮助。