记一次生产dubbo线程池耗尽的问题

问题:

  dubbo线程池耗尽,活跃线程数超过线程池最大线程数(dubbo默认线程池最大线程数为200)

登录服务提供者所在服务器

通过命令行连接dubbo:

//telnet 服务提供者ip dubbo端口
telnet 20.1.16.26 20881

查看dubbo活跃线程:

status -l

可以通过增加线程池最大线程数来解决:

<dubbo:provider timeout="50000" threadpool="fixed" threads="500" accepts="1000" />

timeout="5000":设置远程调用服务的超时时间为5000毫秒
threadpool="fixed":线程模型为固定大小的线程池,启动时建立线程,不关闭,一直持有
threads="500":线程数为500
accepts="1000":限制服务器端的接受的连接的最大值为1000

导致原因:

  服务提供者数据源连接池最大连接数300,提供者数据库连接池连接数在高峰时已经超过最大连接数,导致服务调用响应速度非常慢,请求全部超时,dubbo的线程长时间保持连接,一直未释放,导致活跃线程超过最大线程数

原文地址:https://www.cnblogs.com/pluto-yang/p/12625232.html

时间: 2024-08-02 13:07:15

记一次生产dubbo线程池耗尽的问题的相关文章

dubbo 线程池

在dubbo调用过程中被调用方有两个线程池:io线程池,业务线程池. 这也是dubbo调优的点. 配置信息: <dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" /> Dispatcher all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等. direct 所有消息都不派发到线程池,全部

记一次生产环境线程阻塞的排查

1.使用top命令查找出消耗最多的进程id $ top #进程 $ top -H #线程 2.查看进程中具体线程的资源消耗情况 $ strace -p [线程ID] 3.将线程ID转成16进制 $ printf "%x\n" [线程ID] 4.查找具体阻塞的代码中的方法 $ jstack [进程ID] |grep [转好的16进制] -A 30 5.其他的一些常用命令 $ htop #top的升级版,一般需要安装,centos7安装如下 $ yum install epel-relea

再聊线程池

引言 最近恰好在组内分享线程池,又看了看四年前自己写的线程池文章,一是感叹时光荏苒,二是感叹当时的理解太浅薄了,三是感叹自己这么多年依然停留在浅薄的理解当中,没有探究其实现,羞愧难当.遂把分享的内容整理出来,希望能够让读者对线程池有一个全新的认识. 池化 这里池化并不是深度学习中的池化,而是将资源交给池来管理的这一过程.我们在开发中经常回接触到池化资源的技术,最常见的当然是数据库连接池,以及我们今天要讲的线程池,那这种池化资源的特点和好处是什么呢? 特点 通常管理昂贵的资源,如连接.线程等 资源

简单RPC框架-业务线程池

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

07深入理解Java线程池

之前面试baba系时遇到一个相对简单的多线程编程题,即"3个线程循环输出ADC",自己答的并不是很好,深感内疚,决定更加仔细的学习<并发编程的艺术>一书,到达掌握的强度.(之前两月休息时间都花在了lol和吃鸡上,算是劳逸结合了,推荐大家代码写累了可以玩下吃鸡,是个不错的调剂) 流程分析 Java的线程池是最常用的并发框架,合理的使用线程池可以降低系统消耗.提高响应速度.提高线程的可管理性.线程池的基础处理流程如下图所示. 上图中标红的4处正好是构建线程池的核心,核心线程池大

线程池深入(li)

java线程池.在jdk5之后为我们提供了线程池,只需要使用API,不用去考虑线程池里特殊的处理机制.jdk5线程池分好多种,固定尺寸的线程池.可变尺寸连接池等.常用的是ThreadPoolExecutor,它的构造方法如下: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue,

如何使用加拿大28源码下载理解线程池

平时接触过加拿大28源码下载[dashengba.com]Q3266397597多线程开发的童鞋应该都或多或少了解过线程池,之前发布的<阿里巴巴 Java 手册>里也有一条:可见线程池的重要性.简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建.解耦作用:线程的创建于执行完全分开,方便维护.应当将其放入一个池子中,可以给其他任务进行复用.线程池原理谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中:每次使用都从里面获取,用完之后又放回池子供其他人使用,有点

如何优雅的使用和理解线程池

前言 平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的<阿里巴巴 Java 手册>里也有一条: 可见线程池的重要性. 简单来说使用线程池有以下几个目的: 线程是稀缺资源,不能频繁的创建. 解耦作用:线程的创建于执行完全分开,方便维护. 应当将其放入一个池子中,可以给其他任务进行复用. 线程池原理 谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中:每次使用都从里面获取,用完之后又放回池子供其他人使用,有点吃大锅饭的意思. 那在 Java 中又是如何实现的

如何优雅的使用和理解线程池----转

线程池原理 谈到线程池就会想到池化技术,其中最核心的思想就是把宝贵的资源放到一个池子中:每次使用都从里面获取,用完之后又放回池子供其他人使用,有点吃大锅饭的意思. 那在 Java 中又是如何实现的呢? 在 JDK 1.5 之后推出了相关的 api,常见的创建线程池方式有以下几种: Executors.newCachedThreadPool():无限线程池. Executors.newFixedThreadPool(nThreads):创建固定大小的线程池. Executors.newSingle