Skip to content

Commit

Permalink
[ISSUE #301] add jmx monitor
Browse files Browse the repository at this point in the history
  • Loading branch information
KamToHung committed Jan 11, 2024
1 parent 3575a4f commit 45cea37
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,26 @@

package org.dromara.dynamictp.common.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;




/**
* ThreadPoolStats related
*
* @author yanhom
* @since 1.0.0
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class ThreadPoolStats extends Metrics {

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,19 @@

package org.dromara.dynamictp.core.monitor.collector;

import cn.hutool.core.bean.BeanUtil;
import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.Tag;
import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
import org.dromara.dynamictp.common.em.CollectorTypeEnum;
import org.dromara.dynamictp.common.entity.ThreadPoolStats;
import org.dromara.dynamictp.common.util.CommonUtil;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;

/**
Expand Down Expand Up @@ -61,7 +61,7 @@ public void collect(ThreadPoolStats threadPoolStats) {
if (Objects.isNull(oldStats)) {
GAUGE_CACHE.put(threadPoolStats.getPoolName(), threadPoolStats);
} else {
BeanUtil.copyProperties(threadPoolStats, oldStats);
BeanUtils.copyProperties(threadPoolStats, oldStats);
}
gauge(GAUGE_CACHE.get(threadPoolStats.getPoolName()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,7 @@ public void collect(ThreadPoolStats threadPoolStats) {
try {
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName(DTP_METRIC_NAME_PREFIX + ":name=" + threadPoolStats.getPoolName());
ThreadPoolStatsJMX stats = new ThreadPoolStatsJMX();
stats.setThreadPoolStats(threadPoolStats);
ThreadPoolStatsJMX stats = new ThreadPoolStatsJMX(threadPoolStats);
server.registerMBean(stats, name);
} catch (JMException e) {
log.error("collect thread pool stats error", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,20 @@

import org.dromara.dynamictp.common.entity.ThreadPoolStats;

import java.beans.ConstructorProperties;

/**
* @author <a href = "mailto:[email protected]">KamTo Hung</a>
*/
public class ThreadPoolStatsJMX implements ThreadPoolStatsMXBean {

private ThreadPoolStats threadPoolStats;

@ConstructorProperties({"threadPoolStats"})
public ThreadPoolStatsJMX(ThreadPoolStats threadPoolStats) {
this.threadPoolStats = threadPoolStats;
}

@Override
public ThreadPoolStats getThreadPoolStats() {
return this.threadPoolStats;
Expand Down
14 changes: 7 additions & 7 deletions test/test-core/src/test/resources/dynamic-tp-demo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ spring:
enabled: true
enabledBanner: true # 是否开启banner打印,默认true
enabledCollect: true # 是否开启监控指标采集,默认false
collectorTypes: micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
collectorTypes: jmx,micrometer,logging # 监控数据采集器类型(logging | micrometer | internal_logging),默认micrometer
logPath: /home/logs # 监控日志数据路径,默认 ${user.home}/logs
monitorInterval: 5 # 监控时间间隔(报警判断、指标采集),默认5s
configType: yml # 配置文件类型
executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
executors: # 动态线程池配置,都有默认值,采用默认值的可以不配置该项,减少配置量
- threadPoolName: testRunTimeoutDtpExecutor
executorType: common # 线程池类型common、eager:适用于io密集型
corePoolSize: 1
Expand All @@ -25,7 +25,7 @@ spring:
preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
- threadPoolName: testQueueTimeoutDtpExecutor
executorType: common # 线程池类型common、eager:适用于io密集型
corePoolSize: 1
Expand All @@ -41,7 +41,7 @@ spring:
preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
- threadPoolName: testRejectedQueueTimeoutCancelDtpExecutor
executorType: common # 线程池类型common、eager:适用于io密集型
corePoolSize: 1
Expand All @@ -57,7 +57,7 @@ spring:
preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
- threadPoolName: eagerDtpThreadPoolExecutor
executorType: eager # 线程池类型common、eager:适用于io密集型
corePoolSize: 1
Expand All @@ -73,7 +73,7 @@ spring:
preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
runTimeout: 200 # 任务执行超时阈值,目前只做告警用,单位(ms)
queueTimeout: 100 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口
- threadPoolName: priorityDtpThreadPoolExecutor
executorType: priority # 线程池类型common、eager:适用于io密集型
corePoolSize: 1
Expand All @@ -88,4 +88,4 @@ spring:
preStartAllCoreThreads: false # 是否预热所有核心线程,默认false
runTimeout: 10000 # 任务执行超时阈值,目前只做告警用,单位(ms)
queueTimeout: 10000 # 任务在队列等待超时阈值,目前只做告警用,单位(ms)
taskWrapperNames: ["ttl"] # 任务包装器名称,集成TaskWrapper接口
taskWrapperNames: [ "ttl" ] # 任务包装器名称,集成TaskWrapper接口

0 comments on commit 45cea37

Please sign in to comment.