SpringBoot项目线程一直累加,没有进行回收的问题分析记录

本文记录了一个SpringBoot项目中线程数量持续增加,导致服务崩溃的问题。通过jconsole和jvisualvm分析线程堆日志,发现由于未正确关闭unirest HTTP请求导致线程未回收。解决方案是在每次使用unirest时加入shutDown操作,成功实现线程回收,维持服务正常运行。
摘要由CSDN通过智能技术生成

问题

平时空闲时间,一直给朋友维护一个SpringBoot项目。随着业务发展,朋友经常反馈服务经常崩溃,无法正常访问。通过jvm自带的jconsole观察到,该项目自从启动后,线程数量一直出于不断增加的趋势,没有线程回收的迹象,如下图所示:
在这里插入图片描述
由此诊断,线程的不回收导致随着时间延长,大量的系统资源被占用,后续的请求线程无法创建,导致服务崩溃。

分析

我们需要找到线程没有回收的原因。由于该项目是运行windows服务器,我们采用jvm自带的jvisualvm进行导出线程的堆日志。

cmd,输入以下命令:

jvisualvm

回车确认,打开了进入jvisualvm监控页面。
在这里插入图片描述
在这里插入图片描述
通过以下界面,就可以查看到线程Dump信息。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线程Spring Boot项目中可以用于多任务并发处理、提高系统的吞吐量和响应能力。以下是一个简单的示例,演示了如何在Spring Boot中使用多线程: 1. 添加依赖:在项目的pom.xml文件中添加以下依赖: ```xml <dependencies> <!-- 其他依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-task</artifactId> </dependency> </dependencies> ``` 2. 创建一个多线程任务类:创建一个类来执行具体的多线程任务,继承自`java.lang.Thread`类或实现`java.lang.Runnable`接口。 ```java public class MyTask extends Thread { @Override public void run() { // 在这里编写具体的多线程任务逻辑 } } ``` 3. 在Spring Boot应用程序中使用多线程任务:在你需要使用多线程的地方,注入一个`org.springframework.core.task.TaskExecutor`实例,并使用它来执行多线程任务。 ```java @RestController public class MyController { @Autowired private TaskExecutor taskExecutor; @GetMapping("/run-task") public String runTask() { taskExecutor.execute(new MyTask()); return "Task started"; } } ``` 在上面的示例中,我们通过调用`taskExecutor.execute()`方法来执行多线程任务。 4. 配置多线程池:为了更好地控制多线程的执行,可以在`application.properties`文件中配置线程池的相关属性。 ```properties spring.task.execution.pool.core-size=10 spring.task.execution.pool.max-size=20 spring.task.execution.pool.queue-capacity=1000 ``` 在上面的配置中,我们定义了核心线程数、最大线程数和任务队列容量等属性。 通过以上步骤,你可以在Spring Boot项目中使用多线程来执行并发任务。请注意,多线程编程需要考虑线程安全和资源共享的问题,确保正确地处理并发访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值