前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊dubbo的StatusChecker

聊聊dubbo的StatusChecker

作者头像
code4it
发布2019-07-01 15:38:12
4740
发布2019-07-01 15:38:12
举报
文章被收录于专栏:码匠的流水账码匠的流水账

本文主要研究一下dubbo的StatusChecker

Status

dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/status/Status.java

代码语言:javascript
复制
public class Status {

    private final Level level;
    private final String message;
    private final String description;

    public Status(Level level) {
        this(level, null, null);
    }

    public Status(Level level, String message) {
        this(level, message, null);
    }

    public Status(Level level, String message, String description) {
        this.level = level;
        this.message = message;
        this.description = description;
    }

    public Level getLevel() {
        return level;
    }

    public String getMessage() {
        return message;
    }

    public String getDescription() {
        return description;
    }

    /**
     * Level
     */
    public enum Level {
        /**
         * OK
         */
        OK,

        /**
         * WARN
         */
        WARN,

        /**
         * ERROR
         */
        ERROR,

        /**
         * UNKNOWN
         */
        UNKNOWN
    }

}
  • Status定义了三个属性,分别是level、message、description;其中level有OK、WARN、ERROR、UNKNOWN四个级别

StatusChecker

dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/status/StatusChecker.java

代码语言:javascript
复制
@SPI
public interface StatusChecker {

    /**
     * check status
     *
     * @return status
     */
    Status check();

}
  • StatusChecker定义了check接口,返回Status

LoadStatusChecker

dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/status/support/LoadStatusChecker.java

代码语言:javascript
复制
@Activate
public class LoadStatusChecker implements StatusChecker {

    @Override
    public Status check() {
        OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
        double load;
        try {
            Method method = OperatingSystemMXBean.class.getMethod("getSystemLoadAverage", new Class<?>[0]);
            load = (Double) method.invoke(operatingSystemMXBean, new Object[0]);
            if (load == -1) {
                com.sun.management.OperatingSystemMXBean bean =
                        (com.sun.management.OperatingSystemMXBean) operatingSystemMXBean;
                load = bean.getSystemCpuLoad();
            }
        } catch (Throwable e) {
            load = -1;
        }
        int cpu = operatingSystemMXBean.getAvailableProcessors();
        return new Status(load < 0 ? Status.Level.UNKNOWN : (load < cpu ? Status.Level.OK : Status.Level.WARN),
                (load < 0 ? "" : "load:" + load + ",") + "cpu:" + cpu);
    }

}
  • LoadStatusChecker实现了StatusChecker接口,其check方法从operatingSystemMXBean的getSystemLoadAverage方法读取load,然后根据cpu个数来计算load

MemoryStatusChecker

dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/status/support/MemoryStatusChecker.java

代码语言:javascript
复制
@Activate
public class MemoryStatusChecker implements StatusChecker {

    @Override
    public Status check() {
        Runtime runtime = Runtime.getRuntime();
        long freeMemory = runtime.freeMemory();
        long totalMemory = runtime.totalMemory();
        long maxMemory = runtime.maxMemory();
        boolean ok = (maxMemory - (totalMemory - freeMemory) > 2048); // Alarm when spare memory < 2M
        String msg = "max:" + (maxMemory / 1024 / 1024) + "M,total:"
                + (totalMemory / 1024 / 1024) + "M,used:" + ((totalMemory / 1024 / 1024) - (freeMemory / 1024 / 1024)) + "M,free:" + (freeMemory / 1024 / 1024) + "M";
        return new Status(ok ? Status.Level.OK : Status.Level.WARN, msg);
    }

}
  • MemoryStatusChecker实现了实现了StatusChecker接口,其check方法从Runtime获取freeMemory、totalMemory、maxMemory,当maxMemory - (totalMemory - freeMemory) > 2048返回OK,否则返回WARN

小结

  • StatusChecker定义了check接口,返回Status;Status定义了三个属性,分别是level、message、description;其中level有OK、WARN、ERROR、UNKNOWN四个级别
  • LoadStatusChecker实现了StatusChecker接口,其check方法从operatingSystemMXBean的getSystemLoadAverage方法读取load,然后根据cpu个数来计算load
  • MemoryStatusChecker实现了实现了StatusChecker接口,其check方法从Runtime获取freeMemory、totalMemory、maxMemory,当maxMemory - (totalMemory - freeMemory) > 2048返回OK,否则返回WARN

doc

  • StatusChecker
  • LoadStatusChecker
  • MemoryStatusChecker
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Status
  • StatusChecker
    • LoadStatusChecker
      • MemoryStatusChecker
      • 小结
      • doc
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档