iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >RestTemplate未使用线程池问题的解决方法
  • 454
分享到

RestTemplate未使用线程池问题的解决方法

2024-04-02 19:04:59 454人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、问题描述 现场出现SpringBoot服务卡死,无法打开页面现象。 初步分析为服务中使用RestTemplate通信框架,但未使用连接池,如果通信抛出异常(连接失败),连续运行一

一、问题描述

现场出现SpringBoot服务卡死,无法打开页面现象。

初步分析为服务中使用RestTemplate通信框架,但未使用连接池,如果通信抛出异常(连接失败),连续运行一定时间,导致线程飙升,资源耗尽,服务程序宕机。

二、问题再现

模拟无法通信的微服务地址,修改连接2s/次,启动三个微服务demo进行通信,连续测试2小时,现象可再现:

详细如下图:

启动时线程数:

连接异常提示:

线程飙升:

大量未关闭线程:

线程dump信息:

"Http-NIO-8081-exec-120" #216 daemon prio=5 os_prio=0 tid=0x000000002b0f9800 nid=0x4a28 runnable [0x0000000030349000]
   java.lang.Thread.State: RUNNABLE
       at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    …
       at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53)
        at org.springframework.WEB.client.RestTemplate.doExecute(RestTemplate.java:737)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:672)
        at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:313)

三、问题分析:

主动健康检查时,RestTemplate默认情况下不使用连接池,每次调用都会打开一个新的本地临时端口和一个新连接,如果通信异常,会导致连接不被回收,持续通信,它会不断新建线程,并且很快突破本地可用端口限制范围,导致服务卡死。

四、解决方案:

使用RestTemplate连接池,设置ReadTimeout、ConnectTimeout超时时间,进行连接回收。

五、回归验证:

修改后,验证如下:

初始线程:

测试3小时结束时线程:

线程池线程未增加,状态交替

到此这篇关于RestTemplate未使用线程池问题的解决方法的文章就介绍到这了,更多相关RestTemplate未使用线程池内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: RestTemplate未使用线程池问题的解决方法

本文链接: https://www.lsjlt.com/news/128834.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • RestTemplate未使用线程池问题的解决方法
    一、问题描述 现场出现springboot服务卡死,无法打开页面现象。 初步分析为服务中使用RestTemplate通信框架,但未使用连接池,如果通信抛出异常(连接失败),连续运行一...
    99+
    2022-11-12
  • 解决使用RestTemplate时报错RestClientException的问题
    目录使用RestTemplate时报错RestClientException这是自己封装的一个发送请求的方法这是自定义的一个http信息ConverterRestTemplate的错...
    99+
    2022-11-12
  • RestTemplate使用不当引发的问题及解决
    目录背景问题现象分析过程AbstractConnPoolRestTemplateInterceptingClientHttpRequestRestTemplate源码部分解析如何决定...
    99+
    2022-11-12
  • 基于Spring Boot的线程池监控问题及解决方案
    目录前言为什么需要对线程池进行监控如何做线程池的监控数据采集数据存储以及大盘的展示进一步扩展以及思考如何合理配置线程池参数如何动态调整线程池参数如何给不同的服务之间做线程池的隔离实现...
    99+
    2022-11-13
  • 怎么解决RestTemplate使用不当引发的问题
    这篇文章主要讲解了“怎么解决RestTemplate使用不当引发的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决RestTemplate使用不当引发的问题”吧!背景系统: Spr...
    99+
    2023-06-25
  • 如何解析Java线程池在使用中的问题
    本篇文章为大家展示了如何解析Java线程池在使用中的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java线程池需要我们不断的学习,其实我们在使用的时候还是有不少问题需要我们解决。我们实现了一个...
    99+
    2023-06-17
  • MySQL线程处于Opening tables的问题解决方法
    问题描述 最近有一台MySQL5.6.21的服务器,在应用发布后,并发线程Threads_running迅速升高,达到2000左右,大量线程处于等待Opening tables、closing tables...
    99+
    2022-10-18
  • 基于Spring Boot的线程池监控问题如何解决
    这篇文章主要介绍“基于Spring Boot的线程池监控问题如何解决”,在日常操作中,相信很多人在基于Spring Boot的线程池监控问题如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-29
  • C++中的多线程同步问题及解决方法
    C++中的多线程同步问题及解决方法多线程编程是提高程序性能和效率的一种方式,但同时也带来了一系列的同步问题。在多线程编程中,多个线程可能会同时访问和修改共享的数据资源,这可能导致数据的竞争条件、死锁、饥饿等问题。为了避免这些问题,我们需要使...
    99+
    2023-10-22
    多线程 (Multithreading) 同步 (synchronization) 解决方法 (Solution)
  • Python中多线程和线程池的使用方法
    Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。Python中的多线程和线程池是其强大的功能之一,可以让我们更加高效地利用CPU资源,提高程序的运行速度。本篇博客将介绍Py...
    99+
    2023-10-12
    python
  • Java线程安全问题的解决方案
    目录线程安全问题演示解决线程安全问题1.原子类AtomicInteger2.加锁排队执行2.1 同步锁synchronized2.2 可重入锁ReentrantLock3.线程本地变...
    99+
    2022-11-13
  • 多线程编程中遇到的Python问题及解决方法
    多线程编程中遇到的Python问题及解决方法Python是一种广泛使用的编程语言,它有许多优点,其中之一就是可以通过多线程来提高程序的执行效率。然而,在多线程编程中,也会遇到一些常见的问题。本文将讨论一些常见的多线程编程问题,并提供相应的解...
    99+
    2023-10-22
    死锁(Deadlock):多线程编程中
  • Java 线程死锁的问题解决办法
     Java 线程死锁的问题解决办法【线程死锁】 原因:两个线程相互等待被对方锁定的资源 代码模拟:public class DeadLock { public static void main(String[] arg...
    99+
    2023-05-31
    java 线程死锁 ava
  • C#中常见的线程同步问题及解决方法
    C#中常见的线程同步问题及解决方法引言:在多线程编程中,线程同步是一个关键的概念。当多个线程同时访问共享资源时,会导致数据不一致或出现竞态条件等问题。本文将介绍C#中常见的线程同步问题,并提供相应的解决方法和示例代码。一、不正确的数据共享当...
    99+
    2023-10-22
    线程同步问题 C#中的线程同步
  • Python线程池的正确使用方法
    目录Python线程池的正确使用1、为什么要使用线程池呢?2、线程池怎么用呢?3、如何非阻塞的获取线程执行的结果4、线程池的运行策略Python线程池的正确使用 1、为什么要使用线程...
    99+
    2022-11-12
  • python QT界面关闭线程池的线程跟随退出问题怎么解决
    今天小编给大家分享一下python QT界面关闭线程池的线程跟随退出问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2023-07-04
  • Win10系统下无线网卡无法使用问题的解决方法
      Win10系统刚推出不久,便有无数的用户心急火燎地登上体验的大船,去尝鲜Win10的特性,但也要承担Win10尚不稳定的风险。有用户就在升级Win10后发现无线网卡用不了了,怎么解决这问题呢?   以下解决办法适用于...
    99+
    2023-06-09
    Win10 无线网卡 系统 解决 问题 网卡 方法
  • Java使用线程同步解决线程安全问题详解
    第一种方法:同步代码块: 作用:把出现线程安全的核心代码上锁 原理:每次只能一个线程进入,执行完毕后自行解锁,其他线程才能进来执行 锁对象要求:理论上,锁对象只要对于当前同时执行的线...
    99+
    2022-11-13
  • Java使用线程池实现socket编程的方法详解
    目录前言一、一个简单的C/S模型实现1.服务器:2.客户端:二、线程池使用方法1.新建一个线程池2.用Runnable接口实现线程3.创建线程对象并提交至线程池执行三、结合起来四、使...
    99+
    2022-11-13
  • 详解Java线程池的使用(7种创建方法)
    目录 1. 固定数量的线程池a.  线程池返回结果b. ⾃定义线程池名称或优先级2. 带缓存的线程池3. 执⾏定时任务 a.&nbs...
    99+
    2023-03-24
    Java线程池 Java线程池使用 线程池
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作