SecureRandom生成随机数在个别环境超慢的问题

     public static String getVerificationCode(int number) throws NoSuchAlgorithmException {
         StringBuilder sb = new StringBuilder();
         Random rand = SecureRandom.getInstanceStrong();
         for (int i = 0; i < number; i++) {
             // 目的是产生足够随机的数,避免产生的数字重复率高的问题
             int next = rand.nextInt(DigitConst.TEN);

最近上线了一个发送验证码的功能,该功能由组内的一个同事书写。需要随机生成一定长度的验证码,代码片段如上所示。开发环境以及测试环境都没问题。上线到华为云的docker环境中,发送验证码经常超时。现象表现为触发发送验证码后,隔了很长时间没有发送。通过日志看,没有触发调用第三方的短信发送接口。

通过在线上获取jstack后,发现处理线程一直处于runnable状态,业务代码对应 int next = rand.nextInt(DigitConst.TEN),从而怀疑是生成随机数很慢导致。通过网络查询SecureRandom随机数生成,发现其他人也遇到类似问题。根据建议,将获取Random实例的方法改成 Random rand = SecureRandom.getInstance("NativePRNGNonBlocking"),问题得以解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值