zoukankan      html  css  js  c++  java
  • 记一次生产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请求超时是针对客户端的,客户端阻塞的线程报错抛出超时异常,而此时服务端的线程不会抛超时异常,服务端线程不会释放,而是继续执行,然后根据默认的重试机制,再次发起请求,服务端再次从线程池拿线程处理请求,循环往复,服务端dubbo的线程长时间保持连接,一直未释放,越来越多,导致活跃线程超过最大线程数,最终报出线程池满的异常

  • 相关阅读:
    Parameter 'xxx' not found. Available parameters are
    Windows下Redis开机自启动
    异常:找不到文件/无法解析
    远程连接MySQL数据库配置
    调用微信jssdk失败
    css+div 高度满屏
    常用JS正则表达式
    AVL树
    红黑树
    微信小程序实现自定义modal弹窗封装的方法
  • 原文地址:https://www.cnblogs.com/pluto-yang/p/12625232.html
Copyright © 2011-2022 走看看