项目场景:
项目部署的环境是 华为云CCE敏捷版,在项目中需要用到 SecureRandom.getInstanceStrong() 生成随机数,并把随机数作为入参传给外部电子签系统;
问题描述
在本地测试中性能没问题,文件签署很快就完成了,但是在测试环境和正式环境上运行速度很慢,但是又没有报错,即使前端响应超时报错了,后端还是在兢兢业业的签署着;
原因分析:
分析了很多种情况都没找到原因,后来在每个方法开头,结尾都加上了log.info,确定了哪个方法执行慢,又在该方法每行代码都加上log.info,在后台看log输出时间;
最终发现问题所在
double nonce = SecureRandom.getInstanceStrong().nextDouble();
这行代码log跟下行代码隔了2-4分钟。
原因应该是,dockers中系统扰动太少,执行该代码时造成了线程阻塞。
解决方案:
将该行代码改为
double nonce = new SecureRandom().nextDouble();
本地测试通过后上传测试环境继续测试,发现跟本地测试一样快。