千云物流 -生产问题排查跟踪

内部类静态属性导致的问题

伪代码如下

public class InnerClass extends HashMap<String, String> {
    public InnerClass(ChildClass childClass) {
        this.clear();
        this.putAll(childClass.getMap());
    }

    /**
     * @return
     */
    public String get() {
        return get("key");
    }

    /**
     * 操作构建类
     */
    public static ChildClass builder() {
        return new ChildClass();
    }


    /**
     * 内部类
     */
    public static class ChildClass {
        private static Map map = new HashMap();

        public void addI(String i) {
            map.put("key", i);
        }

        public Map<String, String> getMap() {
            return map;
        }

        public InnerClass build() {
            return new InnerClass(this);
        }
    }

在netty请求的上下文放入以下的执行参数,在多并发的情况下多线程出现共享数据的问题。
解决过程:
将ChildClass 中的static 成员修改为非static,问题处理
总结:

 * 通过日志来记录异常现场。缩小定位问题范围。
 * 线上问题排查,场景不知道哪里有问题,只能看代码。
 * 制定测试类,以及模拟测试过程进行分析。
 * 静态成员有引用必须有一个非静态的类来进行实例化。
 * 多线程的安全其实就是对内存的安全访问。

手动写认证导致的问题

spring gateway 调用认证中心。
手写设置token请求的check
没有再调用完成后进行回收。

你可能感兴趣的:(千云物流,问题汇总,java,开发语言)