diff --git a/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolRunStateInfo.java b/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolRunStateInfo.java index 1aa554e7..620c07a4 100644 --- a/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolRunStateInfo.java +++ b/hippo4j-common/src/main/java/cn/hippo4j/common/model/PoolRunStateInfo.java @@ -90,4 +90,14 @@ public class PoolRunStateInfo implements Serializable { */ private String host; + /** + * memoryProportion + */ + private String memoryProportion; + + /** + * freeMemory + */ + private String freeMemory; + } diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/ThreadPoolRunStateHandler.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/ThreadPoolRunStateHandler.java index a316986c..6a81ee6e 100644 --- a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/ThreadPoolRunStateHandler.java +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/handler/ThreadPoolRunStateHandler.java @@ -1,10 +1,13 @@ package cn.hippo4j.starter.handler; import cn.hippo4j.common.model.PoolRunStateInfo; -import cn.hippo4j.starter.toolkit.CalculateUtil; -import cn.hippo4j.starter.core.GlobalThreadPoolManage; import cn.hippo4j.starter.core.DynamicThreadPoolExecutor; +import cn.hippo4j.starter.core.GlobalThreadPoolManage; +import cn.hippo4j.starter.toolkit.ByteConvertUtil; +import cn.hippo4j.starter.toolkit.CalculateUtil; import cn.hippo4j.starter.wrapper.DynamicThreadPoolWrapper; +import cn.hutool.core.util.StrUtil; +import cn.hutool.system.RuntimeInfo; import lombok.extern.slf4j.Slf4j; import java.net.InetAddress; @@ -62,6 +65,15 @@ public class ThreadPoolRunStateHandler { // 队列容量 int queueCapacity = queueSize + remainingCapacity; + // 内存占比: 使用内存 / 最大内存 + RuntimeInfo runtimeInfo = new RuntimeInfo(); + String memoryProportion = StrUtil.builder( + "已分配: ", + ByteConvertUtil.getPrintSize(runtimeInfo.getTotalMemory()), + " / 最大可用: ", + ByteConvertUtil.getPrintSize(runtimeInfo.getMaxMemory()) + ).toString(); + PoolRunStateInfo stateInfo = new PoolRunStateInfo(); stateInfo.setCoreSize(corePoolSize); stateInfo.setMaximumSize(maximumPoolSize); @@ -77,6 +89,8 @@ public class ThreadPoolRunStateHandler { stateInfo.setCompletedTaskCount(completedTaskCount); stateInfo.setHost(INET_ADDRESS.getHostAddress()); stateInfo.setTpId(tpId); + stateInfo.setMemoryProportion(memoryProportion); + stateInfo.setFreeMemory(ByteConvertUtil.getPrintSize(runtimeInfo.getFreeMemory())); int rejectCount = pool instanceof DynamicThreadPoolExecutor ? ((DynamicThreadPoolExecutor) pool).getRejectCount() diff --git a/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ByteConvertUtil.java b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ByteConvertUtil.java new file mode 100644 index 00000000..3cf191de --- /dev/null +++ b/hippo4j-spring-boot-starter/src/main/java/cn/hippo4j/starter/toolkit/ByteConvertUtil.java @@ -0,0 +1,38 @@ +package cn.hippo4j.starter.toolkit; + +/** + * 字节转换工具类. + * + * @author chen.ma + * @date 2021/11/20 12:21 + */ +public class ByteConvertUtil { + + /** + * 字节转换. + * + * @param size + * @return + */ + public static String getPrintSize(long size) { + long covertNum = 1024; + if (size < covertNum) { + return size + "B"; + } else { + size = size / covertNum; + } + if (size < covertNum) { + return size + "KB"; + } else { + size = size / covertNum; + } + if (size < covertNum) { + size = size * 100; + return (size / 100) + "." + (size % 100) + "MB"; + } else { + size = size * 100 / covertNum; + return (size / 100) + "." + (size % 100) + "GB"; + } + } + +}