记录一个由于线程池使用导致内存溢出的解决方案


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM