实战——dynamic TP 可视化动态修改线程池参数配置

背景

使用痛点

开发环境

springboot版本号:2.3.12.RELEASE

集成SpringBoot

1、使用apollo动态修改线程池配置
2、使用undertow容器
3、添加maven依赖

	    <!-- 动态线程池适配器,位置要在undertow依赖前,否则启动报错 -->
        <dependency>
            <groupId>org.dromara.dynamictp</groupId>
            <artifactId>dynamic-tp-spring-boot-starter-adapter-webserver</artifactId>
            <version>1.1.5</version>
        </dependency>
        <!--springboot集成web服务器undertow,不使用tomcat -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <!-- 动态线程池启动依赖 开始 -->
        <dependency>
            <groupId>org.dromara.dynamictp</groupId>
            <artifactId>dynamic-tp-spring-boot-starter-apollo</artifactId>
            <version>1.1.5</version>
        </dependency>
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
        </dependency>

        <!-- 集成promethus -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>
        <!-- 动态线程池启动依赖 结束 -->

4、在apollo上添加配置文件
4.1、在项目中的yml文件中做如下修改
项目中配置文件,追加yml文件名

4.2、新建dtp_dev3.yml文件

spring:
  dynamic:
    tp:
      enabled: true
      enabledBanner: true        # 是否开启banner打印,默认true
      enabledCollect: true      # 是否开启监控指标采集,默认false
      collectorType: micrometer     # 监控数据采集器类型(JsonLog | MicroMeter),默认logging
      logPath: /Users/username/logs        # 监控日志数据路径,默认${user.home}/logs
      monitorInterval: 5         # 监控时间间隔(报警判断、指标采集),默认5s
    #  nacos:                     # nacos配置,不配置有默认值(规则name-dev.yml这样)
    #     dataId: dynamic-tp-demo-dev.yml
    #     group: DEFAULT_GROUP
      apollo:                    # apollo配置,不配置默认拿apollo配置第一个namespace
        namespace: dtp_dev3.yml   # 此属性是用来监控线程池参数变化的,如果不指定或指定错误,则将不会监控到相关参数的变化。
    #  configType: yml            # 配置文件类型
    #   platforms:                 # 通知报警平台配置
    #     - platform: wechat
    #       urlKey: xxx  # 替换
    #       receivers: test1,test2                   # 接受人企微名称
    #     - platform: ding
    #       urlKey: xxx     # 替换
    #       secret: xxx           # 替换,非sign模式可以没有此值
    #       receivers: xxx                   # 钉钉账号手机号
      tomcatTp:                                    # tomcat web server线程池配置
        minSpare: 100
        max: 400
      jettyTp:                                     # jetty web server线程池配置
        min: 100
        max: 400
      undertowTp:                                  # undertow web server线程池配置
        ioThreads: 10
        workerThreads: 400
      executors:                                   # 动态线程池配置
        - threadPoolName: dynamic-tp-name
          corePoolSize: 600
          maximumPoolSize: 1500
          queueCapacity: 2000
          queueType: VariableLinkedBlockingQueue   # 任务队列,查看源码QueueTypeEnum枚举类
          rejectedHandlerType: CallerRunsPolicy    # 拒绝策略,查看RejectedTypeEnum枚举类
          keepAliveTime: 50
          allowCoreThreadTimeOut: false
          threadNamePrefix: test           # 线程名前缀
          notifyItems:                     # 报警项,不配置自动会配置(变更通知、容量报警、活性报警、拒绝报警)
            - type: capacity               # 报警项类型,查看源码 NotifyTypeEnum枚举类
              enabled: true
              threshold: 80                # 报警阈值
              platforms: [ding,wechat]     # 可选配置,不配置默认拿上层platforms配置的所以平台
              interval: 120                # 报警间隔(单位:s)
            - type: change
              enabled: true
            - type: liveness
              enabled: true
              threshold: 80
            - type: reject
              enabled: true
              threshold: 1

5、启动类添加注解:@EnableDynamicTp 【import org.dromara.dynamictp.core.spring.EnableDynamicTp;】
至此,已集成完毕,启动工程若出现如下截图,说明集成完毕

|  __ \                            (_) |__   __|
| |  | |_   _ _ __   __ _ _ __ ___  _  ___| |_ __
| |  | | | | | '_ \ / _` | '_ ` _ | |/ __| | '_ \
| |__| | |_| | | | | (_| | | | | | | | (__| | |_) |
|_____/ __, |_| |_|__,_|_| |_| |_|_|___|_| .__/
         __/ |                              | |
        |___/                               |_|
 :: Dynamic Thread Pool ::
......
DynamicTp register executor: TpMainFields(threadPoolName=dtpExecutor1, corePoolSize=2, maxPoolSize=10, keepAliveTime=50, queueType=TaskQueue, queueCapacity=200, rejectType=CallerRunsPolicy, allowCoreThreadTimeOut=false), source: beanPostProcessor
......
DtpRegistry has been initialized, remote executors: [dtpExecutor1], local executors: [ioIntensiveExecutor, commonExecutor, dtpExecutor2]

接下来就是,针对新的线程池或老的线程池的改造过程:

老的线程池改造:很简单,只需要在定义线程池的地方追加使用这个注解就实现了对老线程池的增强:@DynamicTp

对老线程池的增强
新的线程池:
新老线程池的使用

至此,已经集成完毕,可以修改apollo中的线程池参数值,发布后,稍等片刻后便生效了。
上述配置是针对juc线程池的配置,如果需要对其他线程池配置,可以参考这个链接
https://dynamictp.cn/guide/use/code.html#%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%AE%9A%E4%B9%89
可支持的线程池配置

线程池可视化

1、引入依赖

	    <!-- 集成promethus -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>

2、application.yml文件添加如下配置:

# 暴露监控指标
management:
  metrics:
    export:
      prometheus:
        enabled: true
  endpoints:
    web:
      exposure:
        include: '*'   # 测试使用,线上不要用*,按需开启

3、安装prometheus、grafana,网上有很多教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/427325.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用pyinstaller打包python代码为exe可执行文件并在其他电脑运行的方法

本文介绍基于Python语言中的pyinstaller模块&#xff0c;将写好的.py格式的Python代码及其所用到的所有第三方库打包&#xff0c;生成.exe格式的可执行文件&#xff0c;从而方便地在其他环境、其他电脑中直接执行这一可执行文件的方法。 有时&#xff0c;我们希望将自己电脑上的…

【外汇天眼】外汇交易风险预警:吊销牌照与高风险平台一览

监管信息早知道&#xff01;外汇天眼将每周定期公布监管牌照状态发生变化的交易商&#xff0c;以供投资者参考&#xff0c;规避投资风险。如果平台天眼评分过高&#xff0c;建议投资者谨慎选择&#xff0c;因为在外汇天眼评分高不代表平台没问题&#xff01; 以下是监管牌照发生…

错误: 找不到或无法加载主类 com.zql.springbootTest.SpringbootTestApplication

首先查看application.properties是否出现问题 然后可以尝试 maven install

从基础到高级:Go 语言中 Base32 编码的全面指南

从基础到高级&#xff1a;Go 语言中 Base32 编码的全面指南 引言基础知识base32 编码简介为什么选择 base32 encoding/base32 包概览包的结构和主要类型基本概念 实战教程开始使用 encoding/base32设置开发环境基本的 base32 编码示例解码示例 深入编码细节使用不同的编码表 错…

重保利器,企业安全巡查!亚信安全外部攻击面管理服务可以试用啦

重大安全保障期间 信息系统的稳定与安全至关重要 守在明&#xff0c;攻在暗 传统的防护多始于已知资产的保护 而未知影子资产 则很可能成为攻击者长驱直入的攻击路径 号外号外&#xff01; 亚信安全“外部攻击面管理服务” 即日起&#xff0c;面向新用户 限时试用&…

上门家政服务APP如何开发?看这一篇文章就够了

当下生活节奏快&#xff0c;工作压力大&#xff0c;人们往往无暇处理家务。上门家政APP因此成为刚需&#xff0c;提供便捷、高效的家政服务&#xff0c;满足用户各类需求&#xff0c;解放时间精力。得益于其透明的价格、严格审核的服务人员及用户评价系统&#xff0c;上门家政A…

为什么要学习三维GIS开发?从技术层面告诉你答案

大家都知道GIS开发属于GIS行业中就业薪资较高的岗位&#xff0c;并且测绘、遥感以及城规等相关专业的毕业生纷纷转行做webgis开发。 那么&#xff0c;今天小编从技术层面探讨一下&#xff0c;为什么建议大家不要仅仅停留在webgis&#xff0c;而要继续往前学习三维GIS开发&…

PclSharp1.12.0--均匀采样

一、均匀采样 均匀采样的原理类似于体素化网格采样方法&#xff0c;同样是将点云空间进行划分&#xff0c;不过是以半径r的球体&#xff0c;在当前球体所有点中选择距离球体中心最近的点替代所有点&#xff0c;注意&#xff0c;此时点的位置是不发生移动的。 球体半径选取越大…

yolov8-更换卷积模块-ContextGuidedBlock_Down

源码解读 class ContextGuidedBlock_Down(nn.Module):"""the size of feature map divided 2, (H,W,C)---->(H/2, W/2, 2C)"""def __init__(self, nIn, dilation_rate2, reduction16):"""args:nIn: the channel of input fea…

项目解决方案: 实时视频拼接方案介绍(下)

目 录 1.实时视频拼接概述 2.适用场景 3.系统介绍 4.拼接方案介绍 4.1基于4K摄像机的拼接方案 4.2采用1080P平台3.0 横向拼接 4.3纵横兼顾&#xff0c;竖屏拼接 5.前端选择及架设 5.1前端架设原则 5.1.1安装示意图 5.1.2安装调试基本原则 5.2摄像机及支架 5.…

深入分析Android运行时环境ART:原理、特点与优化策略

摘要 随着移动互联网的快速发展&#xff0c;智能手机的性能和功能日益强大&#xff0c;其中Android操作系统因其开放性和灵活性而占据主导地位。Android运行时环境&#xff08;ART&#xff09;作为执行应用程序代码的关键组件&#xff0c;在系统性能和用户体验方面起着至关重要…

三维可视化技术在设备管理系统中的应用

随着科技的进步&#xff0c;传统的设备管理方法已经不能满足现代企业的需求。为了更高效地管理资产&#xff0c;设备管理系统开始采用三维可视化动态技术。这种技术不仅能够帮助用户快速找到相应的设备&#xff0c;还能够展示设备的现场位置、所处环境、关联设备以及设备参数等…

Project_Euler-12 题解

Project_Euler-12 题解 题目 思路 我们可以从小到大枚举每一个三角形数&#xff0c;然后计算他们的约数个数&#xff0c;从而得到结果。 代码 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <time.h&…

alibabacloud学习笔记07(小滴课堂)

讲解Sentinel自定义异常降级-新旧版本差异 讲解新版Sentinel自定义异常数据开发实战 如果我们都使用原生的报错&#xff0c;我们就无法得到具体的报错信息。 所以我们要自定义异常返回的数据提示&#xff1a; 实现BlockExceptionHandler并且重写handle方法&#xff1a; 使用F…

推荐我最近刚发现的5款实用软件

​ 我喜欢发现和分享一些好用的软件&#xff0c;我觉得它们可以让我们的工作和生活更加轻松和快乐。今天给大家介绍五款我最近发现的软件。 1.桌面工具——PowerToys ​ PowerToys是一款由微软开发的免费开源软件&#xff0c;旨在为Windows 10用户提供更多的自定义和增强功能…

无线鼠标键盘怎么连接电脑?这4个连接方法别错过!

“我新买了一个无线鼠标和键盘&#xff0c;想问问应该怎么将它们与电脑进行连接呢&#xff1f;请大家给我分享几个好用的方法吧&#xff01;” 无线鼠标和键盘已经成为现代办公和娱乐的必备工具&#xff0c;它们通过无线技术与电脑连接&#xff0c;省去了线缆束缚&#xff0c;让…

dvwa靶场xss通关

原理 XSS漏洞是攻击者将恶意代码注入到合法网页中&#xff0c;当用户浏览该页面时&#xff0c;恶意代码会被执行&#xff0c;从而获取用户敏感信息或进行其他攻击。 形成原因 网站对用户输入数据的过滤不严格或不完备&#xff0c;攻击者可以根据这个漏洞向网站提交恶意代码&am…

常用git 打tag命令

1.查看所有tag git tag 2.创建 v5.0.0的tag git tag v5.0.0 git tag &#xff08;创建后查看&#xff09; 3.推送到远程tag git push origin v5.0.0 4.删除远程tag git push origin --delete v5.0.0 5.删除本地tag git tag -d v5.0.0 6.添加带有备注信息的tag git tag v5.…

【Redis】Redis 实现分布式Session

Cookie 保存在客户端浏览器中&#xff0c;而 Session 保存在服务器上。客户端浏览器访问服务器的时候&#xff0c;服务器把客户端信息以某种形式记录在服务器上&#xff0c;这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。 在实际工作…

护眼灯有效果吗怎么样?推荐五款值得入手的护眼台灯

随着护眼台灯被越来越多的人解锁新的护眼攻略&#xff0c;它的产品热度也越来越高&#xff0c;而且光线柔和&#xff0c;是一款非常不错的照明用具。但是也有不少用户反馈买到的护眼台灯效果不好&#xff0c;有时候还会觉得刺眼&#xff0c;有些不合格的台灯使用时间一久还会散…