解决线程异常WAITING(parking)问题

 更新时间:2024年11月15日 08:47:13   作者:夷则sail  
文章总结:在项目中线程数量持续增长无法回收,导致服务器卡死和内存不足,通过分析发现是由于自定义线程池未执行shutdown()关闭导致线程泄漏

线程异常WAITING(parking)

现象

在项目中线程数量持续增长,且基本无法回收关闭,线程数量一直累积达到几万,影响CPU开销和性能,导致服务器卡死,连接上服务器后输入指令提示“无可分配内存”。

查找原因

1.通过ps -eLf|grep '容器名'|wc -l命令找到项目的所占的线程数异常庞大,通过top -p pid H也发现该进程下大量占用资源的线程。

进入容器内查看堆栈信息。

2.通过**jstack -l pid| grep 'java.lang.Thread.State'**发现项目的线程状态大多数都是WAITING(parking)状态

分析是线程一直处于等待状态一直在占用,造成GC无法执行,且新请求进来时造成线程占用累计

3.打印当前JVM快照:

**jstack 7 > /opt/test.dump**

查看快照定位原因:

分析原因

在我的业务中每次处理请求时都会创建一个线程池去多链路执行不同的流程,但是执行完毕后没有使用shutdown()关闭这个线程池对象

这样线程池仍会通过take方法去取等待队列中是否还有未完成的线程任务,等待队列为空时将会一直等待

这样就导致大量的线程hung在这里了(基本是只要方法被调一次,就会产生一个hung住的线程),所以有大量空线程一直占用,造成严重的线程泄漏

总结

在自定义线程池且未交给spring容器管理时,使用完毕的线程池一定要执行shutDown()手动关闭线程池,这是编程上的疏忽。

找到原因后感觉问题很简单,但是查找过程中还是碰壁不少,找过几次都没有找到最终原因。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java批量导出word压缩后的zip文件案例

    Java批量导出word压缩后的zip文件案例

    这篇文章主要介绍了Java批量导出word压缩后的zip文件案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • springboot整合Excel填充数据代码示例

    springboot整合Excel填充数据代码示例

    这篇文章主要给大家介绍了关于springboot整合Excel填充数据的相关资料,文中通过代码示例介绍的非常详细,对大家学习或者使用springboot具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Spring纯注解开发模式让开发简化更简化

    Spring纯注解开发模式让开发简化更简化

    Spring3.0引入了纯注解开发的模式,框架的诞生是为了简化开发,那注解开发就是简化再简化。Spring的特性在整合MyBatis方面体现的淋漓尽致哦
    2022-08-08
  • java编写贪吃蛇小游戏

    java编写贪吃蛇小游戏

    贪吃蛇是经典手机游戏,既简单又耐玩。通过控制蛇头方向吃蛋,使得蛇变长,从而获得积分。今天我们就来用java来实现下贪吃蛇小游戏,有需要的小伙伴可以参考下
    2015-03-03
  • Eclipse项目有红感叹号的解决方法

    Eclipse项目有红感叹号的解决方法

    这篇文章主要为大家详细介绍了Eclipse项目有红感叹号的解决方法,给出了Eclipse项目有红感叹号的原因,以及如何解决?,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 详解Java 10 var关键字和示例教程

    详解Java 10 var关键字和示例教程

    在本文中,我将通过示例介绍新的Java SE 10特性——“var”类型。你将学习如何在代码中正确使用它,以及在什么情况下不能使用它,需要的朋友可以参考下
    2018-10-10
  • Java struts2捕获404错误的方法汇总

    Java struts2捕获404错误的方法汇总

    这篇文章主要为大家详细汇总了Java struts2捕获404错误的常用方法,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • springsecurity 基本使用详解

    springsecurity 基本使用详解

    这篇文章主要介绍了springsecurity 基本使用,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 详解Java实现JSONArray转Map的三种实现方式

    详解Java实现JSONArray转Map的三种实现方式

    本文主要介绍了Java实现JSONArray转Map的三种实现方式,本文只是自己常用的三种,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java删除文件、目录及目录下所有文件的方法实例

    Java删除文件、目录及目录下所有文件的方法实例

    这篇文章主要给大家介绍了关于利用Java删除文件、目录及目录下所有文件的方法,文中给出了详细的示例代码与注解,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2016-12-12

最新评论