生产环境中,客户反馈在启动服务系统后,首次交易存在5秒以上的延迟现象,后续每次交易会避免这时间。
6.通过调用栈分析,阻塞点是在类加载后读取jar包的地方,这个问题目前就可能是多个方面的因素导致的了,可能是生产环境中存储io方面本身存在问题,也可能是jvm在解析war读取jar的过程中存在缓慢,要确认这几个方面的因素,就需要分别验证;
7.由于客户docker容器内未安装可功能跟踪系统调用的工具如(strace、perf)等,先验证是否由于war中记载jar慢导致的,通过本地模拟此类代码,在idea工程中直接启动验证(非war包形式,通过启动引导类加载工程),现场并不存在这个缓慢的过程;但是通过maven将工程打成war包后,通过java -jar XXX.war方式启动,首次交易就出现明显的耗时过程;
8.所以问题可以初步断定,这个现象可能和打成war后,启动服务的存在关系,所以将生产工程启动方式调整,并且将工程文件通过解压后的web部署方式部署,启动后首次验证,问题解决;
9.对于这个问题,在一些资料中也查到了其他开发者的反馈,如这个https://github.com/spring-projects/spring-boot/issues/16471 ,
这个国外大神也提出了同样的问题,并且在git上也提供了验证的工程代码,感兴趣可以下载验证下,同时这个反馈中也提供了几种通过代码层的规避方案可以尝试;
10.所以这个问题的分析,总结下,我们需要掌握的思路之外,还需要对一些工具的使用非常熟悉,并且可以掌握通过现象来搜索问题解决方案的本领;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。