java工程启动优化
如有侵权,无心侵权,请联系~
如果有错误,也欢迎批评指正~
1、背景
在某次上线的过程中,发现出现了大量的线程池拒绝以及携带着超时异常java.util.concurrent.TimeoutException等异常。之前同事上线的时候也存在这种问题,只是最近这种现象越来越明显【所以排除了本次代码上线导致的问题】,所以,排查治理刻不容缓。
2、问题排查及解决方案
2.1、流量排查
出现问题的排查第一步:找到一台有问题的机查看流量是否符合预期。
通过监控平台发现:针对于出现问题的机器,当机器刚启动的时候有大量的请求打进来,然后流量归0,之后开始慢启动。很明显不符合慢启动,因此,应该是慢启动没完全生效。
由于我们是Http接口,所以上游是nginx。通过学习发现,nginx使用的是swrr(smooth Weighted round-robin)负载均衡算法。该算法存在一定的问题:共振问题。尤其是上游nginx集群相比于自身服务很大的时候,更为明显。所以,可以减少nginx的worker节点个数或者优化swrr负载均衡算法【阿里已经优化】。
2.2、自身服务的预热优化
上述优化针对于公司属实有点难,这种涉及到基研的开发、维护,并且影响比较大,估计涉及到排期等问题。那没办法了?我们业务不迭代了?服务不上线了?显然不合理。只能自身服务优化,使得刚启动的机器也能cover住这么大的流量。
那我们就在机器启动之前【对外提供服务之前】,先进行预热,预请求。
预热的入口:
- service层:因为发现线程池拒绝,所以,直接请求service层对线程池进行预热,提前加载出核心线程数。当然也可以使用prestartAllCoreThreads()方法。实验证明:效果不明显
- controller层:因为Spring存在大量的懒加载,所以,直接对controller层进行预热,发起Http请求。效果明显,解决问题。
何时预热,即从哪预热:
- Spring提供了大量的扩展接口。在spring应用启动中,ApplicationContext启动之后(此时,bean已初始化)进行预热操作,提前加载所需要的类和线程池资源。
方法:实现ApplicationRunner或者ConmmandLineRunner这个接口,在实现类里面进行http请求【当然也可以使用SpringListener接口】。推荐使用,扩展性好,可读性好。 参考文献:springBoot启动 - 在服务启动的时候,会有check.sh等脚本问题,check.sh文件读取存放预热接口的文件(或者请求路径写死在check.sh文件中或者发布平台上配置)并发起http请求。等所有请求完成,再队外提供服务。
3、代码实现
实现了ApplicationRunner接口:
java
@Service
public class WarmUpRunner implements ApplicationRunner {
@Resource
private LionConfig lionConfig; // 可配置化
@Override
public void run(ApplicationArguments args) throws Exception {
// 预热循环次数
Integer warmUpCount = lionConfig.getWarmUpCount();
// 预热接口 http://localhost:8603/xx/xxx?version=12.12.200&userid=xxx
List<String> warmUpUrls = lionConfig.getWarmUpUrls();
if (warmUpUrls == null || CollectionUtils.isEmpty(warmUpUrls)) {
return;
}
RestTemplate restTemplate = new RestTemplate();
for (int i = 0; i < warmUpCount; i++) {
for (String warmUpUrl : warmUpUrls) {
restTemplate.getForEntity(warmUpUrl, Object.class);
}
}
}
}
4、效果及结论
4.1、效果对比
方案 | 循环次数 | 压测结果 |
---|---|---|
对照组 | ||
请求service | 2 | |
请求http | 2 |
4.2、结果分析
请求service经过单步调试确实调用了线程池进行获取下游数据,但是经过压测发现性能和对照组没有明显变化,甚至更糟。因此推断开始耗时增加,处理能力弱不只是线程池没预热导致的,甚至是和线程池没有关系,怀疑是首次请求会有很多类 组件需要进行加载导致的。
直接请求http接口就有一个明显的改善(超时999线优化了50% ,50线只有原来的15%)。针对于循环次数,2次和4次性能改善不大。
启动首次请求加载对象:
java
[Loaded org.eclipse.jetty.http.HttpTokens from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.HttpTokens$Token from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.util.TypeUtil from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.util.ModuleLocation from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.HttpURI$State from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.HttpURI$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpChannelOverHttp$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.util.HostPort from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.util.HostPort$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.QuotedCSVParser from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.QuotedCSV from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.QuotedCSVParser$State from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.QuotedCSVParser$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.HttpParser$$Lambda$655/691941795 from org.eclipse.jetty.http.HttpParser]
[Loaded org.eclipse.jetty.server.Server$DateField from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpChannelState$3 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpChannelState$Action from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpChannel$2 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpChannel$Dispatchable from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpChannel$$Lambda$656/322651885 from org.eclipse.jetty.server.HttpChannel]
[Loaded org.eclipse.jetty.server.session.SessionHandler$3 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.HttpFields$ListItr from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.pathmap.ServletPathSpec$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded javax.servlet.ServletRequestEvent from file:/Users/fanjunfu/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar]
[Loaded org.eclipse.jetty.security.SecurityHandler$3 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-security/9.4.30.v20200611/jetty-security-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$2 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$ResponseSent from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$Challenge from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$3 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$Failure from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$4 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$SendSuccess from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$5 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$Wrapped from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$LogoutAuthentication from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$User from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$LoginAuthentication from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.Authentication$Deferred from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.servlet.FilterMapping$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-servlet/9.4.30.v20200611/jetty-servlet-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.servlet.ServletHandler$CachedChain from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-servlet/9.4.30.v20200611/jetty-servlet-9.4.30.v20200611.jar]
[Loaded javax.servlet.ServletRequestWrapper from file:/Users/fanjunfu/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar]
[Loaded org.eclipse.jetty.server.ServletRequestHttpWrapper from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded javax.servlet.ServletResponseWrapper from file:/Users/fanjunfu/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar]
[Loaded org.eclipse.jetty.server.ServletResponseHttpWrapper from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.ServletAttributes from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.springframework.web.cors.CorsUtils from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.core.NamedInheritableThreadLocal from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-core/5.0.11.RELEASE/spring-core-5.0.11.RELEASE.jar]
[Loaded org.springframework.context.i18n.SimpleLocaleContext from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-context/5.0.11.RELEASE/spring-context-5.0.11.RELEASE.jar]
[Loaded org.springframework.boot.actuate.web.trace.servlet.TraceableHttpServletRequest from file:/Users/fanjunfu/.m2/repository/org/springframework/boot/spring-boot-actuator/2.0.7.RELEASE/spring-boot-actuator-2.0.7.RELEASE.jar]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableRequest from file:/Users/fanjunfu/.m2/repository/org/springframework/boot/spring-boot-actuator/2.0.7.RELEASE/spring-boot-actuator-2.0.7.RELEASE.jar]
[Loaded org.springframework.boot.actuate.trace.http.HttpTrace$Request from file:/Users/fanjunfu/.m2/repository/org/springframework/boot/spring-boot-actuator/2.0.7.RELEASE/spring-boot-actuator-2.0.7.RELEASE.jar]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableRequest$$Lambda$657/1956847965 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableRequest]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableRequest$$Lambda$658/488675993 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableRequest]
[Loaded org.eclipse.jetty.http.HttpFields$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$$Lambda$659/409809796 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$$Lambda$660/1430485640 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$$Lambda$661/504305443 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableRequest$$Lambda$662/463590000 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableRequest]
[Loaded org.springframework.web.servlet.LocaleContextResolver from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-webmvc/5.0.11.RELEASE/spring-webmvc-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.servlet.DispatcherServlet$$Lambda$663/1460623009 from org.springframework.web.servlet.DispatcherServlet]
[Loaded org.springframework.web.servlet.FrameworkServlet$RequestBindingInterceptor from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-webmvc/5.0.11.RELEASE/spring-webmvc-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.util.WebUtils from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.util.UriUtils from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.util.AntPathMatcher$AntPatternComparator from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-core/5.0.11.RELEASE/spring-core-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.context.request.ServletWebRequest from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.servlet.mvc.condition.ProducesRequestCondition$$Lambda$664/612386352 from org.springframework.web.servlet.mvc.condition.ProducesRequestCondition]
[Loaded org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping$PartialMatchHelper from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-webmvc/5.0.11.RELEASE/spring-webmvc-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$MatchComparator from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-webmvc/5.0.11.RELEASE/spring-webmvc-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping$$Lambda$665/1541047969 from org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping]
[Loaded org.springframework.boot.actuate.metrics.web.servlet.LongTaskTimingHandlerInterceptor$LongTaskTimingContext from file:/Users/fanjunfu/.m2/repository/org/springframework/boot/spring-boot-actuator/2.0.7.RELEASE/spring-boot-actuator-2.0.7.RELEASE.jar]
[Loaded io.micrometer.core.annotation.TimedSet from file:/Users/fanjunfu/.m2/repository/io/micrometer/micrometer-core/1.0.8/micrometer-core-1.0.8.jar]
[Loaded org.springframework.boot.actuate.metrics.web.servlet.LongTaskTimingHandlerInterceptor$$Lambda$666/1769634021 from org.springframework.boot.actuate.metrics.web.servlet.LongTaskTimingHandlerInterceptor]
[Loaded org.springframework.boot.actuate.metrics.web.servlet.LongTaskTimingHandlerInterceptor$$Lambda$667/1811759986 from org.springframework.boot.actuate.metrics.web.servlet.LongTaskTimingHandlerInterceptor]
[Loaded org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter$$Lambda$668/1416567268 from org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]
[Loaded org.springframework.web.bind.support.WebRequestDataBinder from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.ServletRequestDataBinder from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.servlet.mvc.method.annotation.ExtendedServletRequestDataBinder from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-webmvc/5.0.11.RELEASE/spring-webmvc-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.annotation.SessionAttributes from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter$$Lambda$669/1866874543 from org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]
[Loaded org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod$ConcurrentResultHandlerMethod from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-webmvc/5.0.11.RELEASE/spring-webmvc-5.0.11.RELEASE.jar]
[Loaded org.springframework.ui.ExtendedModelMap from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-context/5.0.11.RELEASE/spring-context-5.0.11.RELEASE.jar]
[Loaded org.springframework.validation.support.BindingAwareModelMap from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-context/5.0.11.RELEASE/spring-context-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.support.SessionStatus from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.support.SimpleSessionStatus from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.servlet.support.RequestContextUtils from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-webmvc/5.0.11.RELEASE/spring-webmvc-5.0.11.RELEASE.jar]
[Loaded org.springframework.ui.ModelMap$$Lambda$670/952497774 from org.springframework.ui.ModelMap]
[Loaded javax.servlet.AsyncListener from file:/Users/fanjunfu/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar]
[Loaded org.springframework.web.context.request.async.StandardServletAsyncWebRequest from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.context.request.async.WebAsyncManager$$Lambda$671/1642034667 from org.springframework.web.context.request.async.WebAsyncManager]
[Loaded org.springframework.web.bind.annotation.RequestParam from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.annotation.RequestPart from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.multipart.support.MultipartResolutionDelegate from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.multipart.MultipartFile from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded javax.servlet.http.Part from file:/Users/fanjunfu/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar]
[Loaded org.springframework.web.bind.annotation.PathVariable from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.annotation.MatrixVariable from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.annotation.RequestBody from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.annotation.RequestHeader from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.annotation.CookieValue from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.annotation.SessionAttribute from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.bind.annotation.RequestAttribute from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-aop/5.0.11.RELEASE/spring-aop-5.0.11.RELEASE.jar]
[Loaded org.aspectj.weaver.ast.ITestVisitor from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.aspectj.weaver.reflect.ShadowMatchImpl$RuntimeTestEvaluator from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.aspectj.weaver.reflect.JoinPointMatchImpl from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.springframework.aop.aspectj.AspectJExpressionPointcut$DefensiveShadowMatch from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-aop/5.0.11.RELEASE/spring-aop-5.0.11.RELEASE.jar]
[Loaded org.springframework.aop.aspectj.RuntimeTestWalker from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-aop/5.0.11.RELEASE/spring-aop-5.0.11.RELEASE.jar]
[Loaded org.springframework.aop.aspectj.RuntimeTestWalker$TestVisitorAdapter from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-aop/5.0.11.RELEASE/spring-aop-5.0.11.RELEASE.jar]
[Loaded org.springframework.aop.aspectj.RuntimeTestWalker$InstanceOfResidueTestVisitor from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-aop/5.0.11.RELEASE/spring-aop-5.0.11.RELEASE.jar]
[Loaded org.springframework.aop.aspectj.RuntimeTestWalker$ThisInstanceOfResidueTestVisitor from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-aop/5.0.11.RELEASE/spring-aop-5.0.11.RELEASE.jar]
[Loaded org.aspectj.lang.JoinPoint$StaticPart from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-aop/5.0.11.RELEASE/spring-aop-5.0.11.RELEASE.jar]
[Loaded org.aspectj.lang.reflect.SourceLocation from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.aspectj.lang.Signature from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.springframework.cglib.core.EmitUtils$15 from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-core/5.0.11.RELEASE/spring-core-5.0.11.RELEASE.jar]
[Loaded org.springframework.cglib.core.EmitUtils$16 from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-core/5.0.11.RELEASE/spring-core-5.0.11.RELEASE.jar]
[Loaded org.eclipse.jetty.util.UrlEncoded from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
[Loaded org.apache.logging.log4j.core.impl.JdkMapAdapterStringMap from file:/Users/fanjunfu/.m2/repository/org/apache/logging/log4j/log4j-core/2.17.1/log4j-core-2.17.1.jar]
[Loaded org.apache.logging.log4j.core.impl.JdkMapAdapterStringMap$$Lambda$672/213970746 from org.apache.logging.log4j.core.impl.JdkMapAdapterStringMap]
[Loaded org.apache.logging.log4j.core.impl.JdkMapAdapterStringMap$$Lambda$673/2095761649 from org.apache.logging.log4j.core.impl.JdkMapAdapterStringMap]
[Loaded com.google.common.hash.AbstractHasher from file:/Users/fanjunfu/.m2/repository/com/google/guava/guava/20.0/guava-20.0.jar]
[Loaded com.google.common.hash.AbstractStreamingHashFunction$AbstractStreamingHasher from file:/Users/fanjunfu/.m2/repository/com/google/guava/guava/20.0/guava-20.0.jar]
[Loaded com.google.common.hash.Murmur3_32HashFunction$Murmur3_32Hasher from file:/Users/fanjunfu/.m2/repository/com/google/guava/guava/20.0/guava-20.0.jar]
[Loaded com.google.common.primitives.UnsignedBytes from file:/Users/fanjunfu/.m2/repository/com/google/guava/guava/20.0/guava-20.0.jar]
[Loaded com.google.common.hash.HashCode from file:/Users/fanjunfu/.m2/repository/com/google/guava/guava/20.0/guava-20.0.jar]
[Loaded com.google.common.hash.HashCode$IntHashCode from file:/Users/fanjunfu/.m2/repository/com/google/guava/guava/20.0/guava-20.0.jar]
[Loaded com.google.common.hash.HashCode$LongHashCode from file:/Users/fanjunfu/.m2/repository/com/google/guava/guava/20.0/guava-20.0.jar]
[Loaded com.google.common.hash.HashCode$BytesHashCode from file:/Users/fanjunfu/.m2/repository/com/google/guava/guava/20.0/guava-20.0.jar]
[Loaded sun.reflect.GeneratedConstructorAccessor131 from __JVM_DefineClass__]
[Loaded sun.reflect.GeneratedMethodAccessor250 from __JVM_DefineClass__]
[Loaded sun.reflect.GeneratedMethodAccessor251 from __JVM_DefineClass__]
[Loaded sun.reflect.GeneratedMethodAccessor252 from __JVM_DefineClass__]
[Loaded sun.reflect.GeneratedMethodAccessor253 from __JVM_DefineClass__]
[Loaded java.util.concurrent.CompletableFuture$AltResult from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.CompletableFuture$AsynchronousCompletionTask from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.CompletableFuture$Completion from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.CompletableFuture$AsyncSupply from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.CompletableFuture$UniCompletion from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.CompletableFuture$UniRun from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.ImmutableMap$MapViewOfValuesAsSingletonSets from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.ImmutableMapKeySet from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.ImmutableMapValues from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.RegularImmutableMap from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.ImmutableBiMap from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.ImmutableMapEntrySet from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.RegularImmutableMap$EntrySet from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.AbstractMapEntry from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.ImmutableEntry from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.ImmutableMapEntry from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.ImmutableMapEntry$TerminalEntry from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.RegularImmutableMap$NonTerminalMapEntry from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.Hashing from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.mortbay.jetty.EofException from file:/Users/fanjunfu/.m2/repository/org/mortbay/jetty/jetty/6.1.26/jetty-6.1.26.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.SingletonImmutableSet from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.RegularImmutableSet from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded org.apache.curator.shaded.com.google.common.collect.EmptyImmutableSet from file:/Users/fanjunfu/.m2/repository/org/apache/curator/curator-client/2.12.0/curator-client-2.12.0.jar]
[Loaded java.util.concurrent.CompletableFuture$BiCompletion from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.CompletableFuture$BiRelay from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.CompletableFuture$CoCompletion from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.ForkJoinPool$ManagedBlocker from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.concurrent.CompletableFuture$Signaller from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded org.apache.thrift.protocol.TSimpleJSONProtocol$Factory from file:/Users/fanjunfu/.m2/repository/org/apache/thrift/libthrift/0.9.3-mt/libthrift-0.9.3-mt.jar]
[Loaded org.apache.thrift.protocol.TSimpleJSONProtocol from file:/Users/fanjunfu/.m2/repository/org/apache/thrift/libthrift/0.9.3-mt/libthrift-0.9.3-mt.jar]
[Loaded org.apache.thrift.protocol.TSimpleJSONProtocol$Context from file:/Users/fanjunfu/.m2/repository/org/apache/thrift/libthrift/0.9.3-mt/libthrift-0.9.3-mt.jar]
[Loaded org.apache.thrift.protocol.TSimpleJSONProtocol$ListContext from file:/Users/fanjunfu/.m2/repository/org/apache/thrift/libthrift/0.9.3-mt/libthrift-0.9.3-mt.jar]
[Loaded org.apache.thrift.protocol.TSimpleJSONProtocol$StructContext from file:/Users/fanjunfu/.m2/repository/org/apache/thrift/libthrift/0.9.3-mt/libthrift-0.9.3-mt.jar]
[Loaded org.apache.thrift.protocol.TSimpleJSONProtocol$MapContext from file:/Users/fanjunfu/.m2/repository/org/apache/thrift/libthrift/0.9.3-mt/libthrift-0.9.3-mt.jar]
[Loaded org.apache.thrift.protocol.TSimpleJSONProtocol$CollectionMapKeyException from file:/Users/fanjunfu/.m2/repository/org/apache/thrift/libthrift/0.9.3-mt/libthrift-0.9.3-mt.jar]
[Loaded org.apache.thrift.protocol.TSet from file:/Users/fanjunfu/.m2/repository/org/apache/thrift/libthrift/0.9.3-mt/libthrift-0.9.3-mt.jar]
[Loaded org.aspectj.lang.reflect.MemberSignature from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.aspectj.lang.reflect.CodeSignature from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.aspectj.lang.reflect.MethodSignature from file:/Users/fanjunfu/.m2/repository/org/aspectj/aspectjweaver/1.8.13/aspectjweaver-1.8.13.jar]
[Loaded org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint$MethodSignatureImpl from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-aop/5.0.11.RELEASE/spring-aop-5.0.11.RELEASE.jar]
[Loaded org.apache.logging.log4j.core.impl.Log4jLogEvent$LogEventProxy from file:/Users/fanjunfu/.m2/repository/org/apache/logging/log4j/log4j-core/2.17.1/log4j-core-2.17.1.jar]
[Loaded java.util.concurrent.TransferQueue from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded org.springframework.web.method.support.AsyncHandlerMethodReturnValueHandler from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.core.ReactiveAdapterRegistry$$Lambda$681/348814900 from org.springframework.core.ReactiveAdapterRegistry]
[Loaded org.springframework.core.ReactiveAdapterRegistry$$Lambda$682/823785775 from org.springframework.core.ReactiveAdapterRegistry]
[Loaded org.springframework.core.ReactiveAdapterRegistry$$Lambda$683/98941668 from org.springframework.core.ReactiveAdapterRegistry]
[Loaded org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-webmvc/5.0.11.RELEASE/spring-webmvc-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.context.request.async.DeferredResult from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.web.context.request.async.WebAsyncTask from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.http.server.ServletServerHttpRequest from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.http.server.ServerHttpAsyncRequestControl from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.http.server.ServletServerHttpResponse from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.http.server.ServletServerHttpResponse$ServletResponseHttpHeaders from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.http.HttpHeaders$$Lambda$684/1253034174 from org.springframework.http.HttpHeaders]
[Loaded java.time.format.DateTimeFormatterBuilder$ReducedPrinterParser from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.time.format.DateTimeFormatterBuilder$ZoneTextPrinterParser from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.time.temporal.TemporalQueries from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.time.temporal.TemporalQueries$$Lambda$685/1853970755 from java.time.temporal.TemporalQueries]
[Loaded java.time.temporal.TemporalQueries$$Lambda$686/955449380 from java.time.temporal.TemporalQueries]
[Loaded java.time.temporal.TemporalQueries$$Lambda$687/1013095183 from java.time.temporal.TemporalQueries]
[Loaded java.time.temporal.TemporalQueries$$Lambda$688/446670829 from java.time.temporal.TemporalQueries]
[Loaded java.time.temporal.TemporalQueries$$Lambda$689/2117119676 from java.time.temporal.TemporalQueries]
[Loaded java.time.temporal.TemporalQueries$$Lambda$690/1591894910 from java.time.temporal.TemporalQueries]
[Loaded java.time.temporal.TemporalQueries$$Lambda$691/1987060046 from java.time.temporal.TemporalQueries]
[Loaded org.springframework.core.io.InputStreamResource from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-core/5.0.11.RELEASE/spring-core-5.0.11.RELEASE.jar]
[Loaded java.util.stream.LongStream from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.util.stream.DoubleStream from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded javax.xml.bind.annotation.XmlRootElement from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded org.springframework.http.StreamingHttpOutputMessage from file:/Users/fanjunfu/.m2/repository/org/springframework/spring-web/5.0.11.RELEASE/spring-web-5.0.11.RELEASE.jar]
[Loaded org.springframework.http.server.ServletServerHttpResponse$$Lambda$692/1540083004 from org.springframework.http.server.ServletServerHttpResponse]
[Loaded org.eclipse.jetty.server.HttpOutput$2 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.util.Callback$Completing from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.util.Callback$Nested from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpChannel$SendCallback from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.HttpGenerator$2 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.http.HttpGenerator$Result from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-http/9.4.30.v20200611/jetty-http-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpConnection$1 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.springframework.web.method.annotation.SessionAttributesHandler$$Lambda$693/1972266876 from org.springframework.web.method.annotation.SessionAttributesHandler]
[Loaded org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter$$Lambda$694/1347825547 from org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter]
[Loaded org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter$$Lambda$695/2118458656 from org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$$Lambda$696/1152103578 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer]
[Loaded java.lang.invoke.LambdaForm$DMH/973964100 from java.lang.invoke.LambdaForm]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$$Lambda$697/1531365881 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$$Lambda$698/230450092 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$$Lambda$699/1122742151 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer]
[Loaded org.springframework.boot.actuate.trace.http.HttpTrace$Response from file:/Users/fanjunfu/.m2/repository/org/springframework/boot/spring-boot-actuator/2.0.7.RELEASE/spring-boot-actuator-2.0.7.RELEASE.jar]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableResponse from file:/Users/fanjunfu/.m2/repository/org/springframework/boot/spring-boot-actuator/2.0.7.RELEASE/spring-boot-actuator-2.0.7.RELEASE.jar]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableResponse$$Lambda$700/1448935620 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableResponse]
[Loaded org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableResponse$$Lambda$701/1917050525 from org.springframework.boot.actuate.trace.http.HttpExchangeTracer$FilteredTraceableResponse]
[Loaded org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter$$Lambda$702/73223232 from org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter]
[Loaded org.springframework.boot.actuate.metrics.web.servlet.WebMvcTags from file:/Users/fanjunfu/.m2/repository/org/springframework/boot/spring-boot-actuator/2.0.7.RELEASE/spring-boot-actuator-2.0.7.RELEASE.jar]
[Loaded java.lang.invoke.LambdaForm$DMH/832483429 from java.lang.invoke.LambdaForm]
[Loaded org.eclipse.jetty.server.HttpChannel$$Lambda$703/901989096 from org.eclipse.jetty.server.HttpChannel]
[Loaded org.eclipse.jetty.util.Callback$4 from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.server.HttpOutput$WriteCompleteCB from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-server/9.4.30.v20200611/jetty-server-9.4.30.v20200611.jar]
[Loaded org.eclipse.jetty.util.Attributes$Wrapper from file:/Users/fanjunfu/.m2/repository/org/eclipse/jetty/jetty-util/9.4.30.v20200611/jetty-util-9.4.30.v20200611.jar]
第二次请求加载对象:
java
[Loaded sun.reflect.GeneratedMethodAccessor255 from __JVM_DefineClass__]
[Loaded sun.reflect.GeneratedMethodAccessor256 from __JVM_DefineClass__]
[Loaded sun.reflect.GeneratedMethodAccessor257 from __JVM_DefineClass__]
[Loaded sun.reflect.GeneratedConstructorAccessor133 from __JVM_DefineClass__]
[Loaded java.util.Collections$UnmodifiableList$1 from /Library/Java/JavaVirtualMachines/jdk1.8.0_331.jdk/Contents/Home/jre/lib/rt.jar]
通过两次请求可以看出,首次请求的时候会有大量的类进行加载,在加载的过程中会有同步【JVM类的加载】。所以,我们在服务启动的时候只要进行预热就把这些大量的懒加载类加载进到JVM中。
4.3、上线效果
上线分别对同一台机器进行对比:
修复前 | 修复后 | |
---|---|---|
problem数量 | ||
problem数量 |
通过上述对比可以看到,problem数量明显减少,尤其是线程池拒绝和任务超时的数量;并且同时transaction可以查看,平均耗时减少以及高耗时的持续时间也减少50%,而最大耗时只有原来的22%,性能确实有了很大的提高。