由于使用到线程变量本地存储,项目上线出现会内存溢出问题,
原因是。交易完成未在交易结束,清理到ThreadLoacl存储的数据,导致线程存储会随交易的增加,而增加,导致内存溢出
解决方案,有两种
配置规避:
代码配置,因为使用到线程池,可以配置线程核心数,和线程最大数,为一致,
keepAliveTime = 0
当为负数,会报错。
当设置为0时:
当线程池中的线程数大于corePoolSize时,keepAliveTime为多余的空闲线程等待新任务的 最长时间,超过这个时间后多余的线程将被终止。这里把keepAliveTime设置为0L,意味着多余 的空闲线程会被立即终止。
当然设置为一样的话,不会出现回收的问题,从制止解决多次创建多个线程,回收,导致的oom。
代码规避:
代码上:
调用remove 清除。