Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

配置识别错误-中文线程池名乱码 #436

Open
littlelk opened this issue Jul 5, 2024 · 7 comments
Open

配置识别错误-中文线程池名乱码 #436

littlelk opened this issue Jul 5, 2024 · 7 comments
Labels
bug Something isn't working

Comments

@littlelk
Copy link

littlelk commented Jul 5, 2024

首先感谢您使用 DynamicTp,如果使用过程中有任何问题,请按照下述模板反馈问题,建议使用 Markdown 语法

版本信息

  • Jdk版本:8
  • SpringBoot版本:2.7.8
  • DynamicTp版本:1.1.7
  • 配置中心版本:自建

问题描述

配置平台变成参数后,触发的告警信息中线程池别名乱码

通过prometheus获取到的结果看,变更后会生成新的线程池,且线程池最大线程数为int最大值
image

  • 配置文件:
    `
    spring:
    dynamic:
    tp:
    enabled: true # 是否启用 dynamictp,默认true
    enabledCollect: true # 是否开启监控指标采集,默认true
    collectorTypes: micrometer # 监控数据采集器类型(logging | micrometer | internal_logging | JMX),默认micrometer
    logPath: /home/logs/dynamictp/user-center/ # 监控日志数据路径,默认 ${user.home}/logs,采集类型非logging不用配置
    monitorInterval: 5 # 监控时间间隔(报警检测、指标采集),默认5s
    platforms: # 通知报警平台配置
    - platform: wechat
    platformId: 1
    urlKey: # webhook 中的 key
    receivers: # 接受人企微账号

    executors:                               # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
      - threadPoolName: snapshotDetailMysqlOpExecutor         # 线程池名称,必填
        threadPoolAliasName: mysql操作线程池        # 线程池别名,可选
        executorType: common                   # 线程池类型 common、eager、ordered、scheduled、priority,默认 common
        corePoolSize: 32                       # 核心线程数,默认1
        maximumPoolSize: 120                   # 最大线程数,默认cpu核数
        queueCapacity: 1024                  # 队列容量,默认1024
        queueType: VariableLinkedBlockingQueue         # 任务队列,查看源码QueueTypeEnum枚举类,默认VariableLinkedBlockingQueue
        rejectedHandlerType: CallerRunsPolicy          # 拒绝策略,查看RejectedTypeEnum枚举类,默认AbortPolicy
        keepAliveTime: 60                              # 空闲线程等待超时时间,默认60
        threadNamePrefix: dtp                         # 线程名前缀,默认dtp
        allowCoreThreadTimeOut: false                  # 是否允许核心线程池超时,默认false
        waitForTasksToCompleteOnShutdown: true         # 参考spring线程池设计,优雅关闭线程池,默认true
        awaitTerminationSeconds: 5                     # 优雅关闭线程池时,阻塞等待线程池中任务执行时间,默认3,单位(s)
        preStartAllCoreThreads: false                  # 是否预热所有核心线程,默认false
        runTimeout: 5000                               # 任务执行超时阈值,单位(ms),默认0(不统计)
        queueTimeout: 60000                            # 任务在队列等待超时阈值,单位(ms),默认0(不统计)
        taskWrapperNames: ["ttl", "mdc"]               # 任务包装器名称,继承TaskWrapper接口
        notifyEnabled: false                            # 是否开启报警,默认true
        platformIds: [1,2]                             # 报警平台id,不配置默认拿上层platforms配置的所有平台
        notifyItems:                     # 报警项,不配置自动会按默认值(查看源码NotifyItem类)配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
          - type: change
            enabled: true
    
          - type: capacity               # 队列容量使用率,报警项类型,查看源码 NotifyTypeEnum枚举类
            enabled: false
            threshold: 70                # 报警阈值,默认70,意思是队列使用率达到70%告警
            platformIds: [2]             # 可选配置,本配置优先级 > 所属线程池platformIds > 全局配置platforms
            interval: 120                # 报警间隔(单位:s),默认120
    
          - type: liveness               # 线程池活性
            enabled: true
            threshold: 70                # 报警阈值,默认 70,意思是活性达到70%告警
    
          - type: reject                 # 触发任务拒绝告警
            enabled: true
            threshold: 10               # 默认阈值10
    
          - type: run_timeout            # 任务执行超时告警
            enabled: true
            threshold: 10               # 默认阈值10
    
          - type: queue_timeout          # 任务排队超时告警
            enabled: true
            threshold: 10               # 默认阈值10
    
      - threadPoolName: delayProcessCallbackExecutor
        threadPoolAliasName: 延迟处理回调线程池
        executorType: scheduled
        corePoolSize: 32
        maximumPoolSize: 131
        queueCapacity: 1024
        queueType: VariableLinkedBlockingQueue
        rejectedHandlerType: CallerRunsPolicy
        keepAliveTime: 60                              # 空闲线程等待超时时间,默认60
        threadNamePrefix: dtp-delay                    # 线程名前缀,默认dtp
        allowCoreThreadTimeOut: false                  # 是否允许核心线程池超时,默认false
        waitForTasksToCompleteOnShutdown: true         # 参考spring线程池设计,优雅关闭线程池,默认true
        awaitTerminationSeconds: 5                     # 优雅关闭线程池时,阻塞等待线程池中任务执行时间,默认3,单位(s)
        preStartAllCoreThreads: false                  # 是否预热所有核心线程,默认false
        runTimeout: 5000                                # 任务执行超时阈值,单位(ms),默认0(不统计)
        queueTimeout: 6000                              # 任务在队列等待超时阈值,单位(ms),默认0(不统计)
        taskWrapperNames: ["ttl", "mdc"]               # 任务包装器名称,继承TaskWrapper接口
        notifyEnabled: true                            # 是否开启报警,默认true
        platformIds: [1,2]                             # 报警平台id,不配置默认拿上层platforms配置的所有平台
        notifyItems:                     # 报警项,不配置自动会按默认值(查看源码NotifyItem类)配置(变更通知、容量报警、活性报警、拒绝报警、任务超时报警)
          - type: change
            enabled: true
    
          - type: capacity               # 队列容量使用率,报警项类型,查看源码 NotifyTypeEnum枚举类
            enabled: true
            threshold: 70                # 报警阈值,默认70,意思是队列使用率达到70%告警
            platformIds: [1]             # 可选配置,本配置优先级 > 所属线程池platformIds > 全局配置platforms
            interval: 120                # 报警间隔(单位:s),默认120
    
          - type: liveness               # 线程池活性
            enabled: true
            threshold: 70                # 报警阈值,默认 70,意思是活性达到70%告警
    
          - type: reject                 # 触发任务拒绝告警
            enabled: true
            threshold: 10               # 默认阈值10
    
          - type: run_timeout            # 任务执行超时告警
            enabled: true
            threshold: 10               # 默认阈值10
    
          - type: queue_timeout          # 任务排队超时告警
            enabled: true
            threshold: 10               # 默认阈值10
    

`

  • 代码使用步骤:
  • 报错信息:
  • 猜测可能原因:

复现步骤

变更线程池参数

其他信息

  1. xxx
  2. xxx
@littlelk littlelk added the bug Something isn't working label Jul 5, 2024
@littlelk
Copy link
Author

littlelk commented Jul 8, 2024

debug看到问题了,好像是新建scheled线程池的时候,没办法指定最大线程数和队列长度

@xingyiteng
Copy link
Contributor

debug看到问题了,好像是新建scheled线程池的时候,没办法指定最大线程数和队列长度

请问一下,scheled类型的线程池,配置中心变更参数后,能收到告警通知吗?

@littlelk
Copy link
Author

littlelk commented Jul 9, 2024

debug看到问题了,好像是新建scheled线程池的时候,没办法指定最大线程数和队列长度

请问一下,scheled类型的线程池,配置中心变更参数后,能收到告警通知吗?

改变核心线程池可以收到通知,不过也会存在问题,通知的线程池名称的中文就乱码了,如果不改变的前提下收到的告警通知就是正常的

@littlelk
Copy link
Author

littlelk commented Jul 9, 2024

还会有个问题,每次更改参数后,就会多出来一个线程池而不是在原来线程池的基础上改变参数,我用prometheus采集到的数据就是2个完全相同的线程池,感觉也是个bug
image

@KamToHung
Copy link
Collaborator

scheduled

是scheduled executor配置变更会有这个问题吗,然后是企微通知

@yanhom1314
Copy link
Collaborator

1.乱码问题可能是你配置文件编码有问题,排查下
2.调整参数出现两个线程池,这个应该是你改变了线程池别名,grafana特性导致的错觉,tag变了grafana会重绘不同线,实际上程序里就一个线程池,可以不用管

@littlelk
Copy link
Author

littlelk commented Jul 9, 2024

1.乱码问题可能是你配置文件编码有问题,排查下 2.调整参数出现两个线程池,这个应该是你改变了线程池别名,grafana特性导致的错觉,tag变了grafana会重绘不同线,实际上程序里就一个线程池,可以不用管

我排查了,确认配置文件没有编码问题,我在监听事件部分打印了变更的文件内容,读取的数据是正常的,中文没有乱码
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants