zoukankan      html  css  js  c++  java
  • java.util.ConcurrentModificationException故障分析

    • 问题描述
      账号打通上线后发现偶尔会出现java.lang.RuntimeException: java.util.ConcurrentModificationException异常,这个是在生成请求签名的时候发生的问题,经分析应该是阿里云网关比较老版本的方法有bug。这个会导致线上用户突然掉线,体验太差。
    • 出现该Exception的根本原因
      在对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。
    • 解决过程
      将老的换成新的阿里云网关SDK,在修改过程中发现jar包中一个方法参数传入错误,因此暂时不采用这种方式。采用方法重试因为这并不是因为逻辑错误导致,而是框架不稳定造成的,类似的像阿里云memcache不稳定的情况也可以采用复试的方法,这样可以有效的提高用户体验。
    • 修改的关键代码

    • int retry_max = 3;
      for (int i = 0; i < retry_max; i++) {
          try {
              response = Client.execute(request);
              break;
          } catch (ConcurrentModificationException exception) {
              continue;
          } catch (Exception e) {
              break;
          }
      }

      这里需要注意:idea会提示continue是不必要的,因为在循环内抛出异常会直接跳出本次循环进入下一次循环,因此并不需要写continue也可以进入下次循环,但是这写可以提高可读性,暂时保留。

    • 测试思路

      由于这是一个并发问题,而服务的访问量级也在10000,因此发一万次请求模仿线上环境

    • 测试代码

      for (int i = 0; i< 10000;i++){
          CloseableHttpClient httpclient = HttpClients.createDefault();
          HttpGet httpget = new HttpGet("https://r2test.mjb6.cn:8443/api/user/detail?token=1422290-EqEE4pxRvk51K9KCkZpknRC4rj7y6GMa");
          CloseableHttpResponse response = httpclient.execute(httpget);
          LOGGER.error("response="+JSON.toJSONString(response));
      }
     
  • 相关阅读:
    微信小程序-----校园头条详细开发之注册登录
    微信小程序-----校园头条详细开发之首页
    day 99天
    day 98天
    day 97 VUE第一天
    day 96
    day 95天
    day 94 RestFramework序列化组件与视图view
    day 93 Restframwork
    day 92
  • 原文地址:https://www.cnblogs.com/xiangtingsulinlin/p/9337506.html
Copyright © 2011-2022 走看看