博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊聊Elasticsearch的ProcessProbe
阅读量:6277 次
发布时间:2019-06-22

本文共 5766 字,大约阅读时间需要 19 分钟。

本文主要研究一下Elasticsearch的ProcessProbe

ProcessProbe

elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java

public class ProcessProbe {    private static final OperatingSystemMXBean osMxBean = ManagementFactory.getOperatingSystemMXBean();    private static final Method getMaxFileDescriptorCountField;    private static final Method getOpenFileDescriptorCountField;    private static final Method getProcessCpuLoad;    private static final Method getProcessCpuTime;    private static final Method getCommittedVirtualMemorySize;    static {        getMaxFileDescriptorCountField = getUnixMethod("getMaxFileDescriptorCount");        getOpenFileDescriptorCountField = getUnixMethod("getOpenFileDescriptorCount");        getProcessCpuLoad = getMethod("getProcessCpuLoad");        getProcessCpuTime = getMethod("getProcessCpuTime");        getCommittedVirtualMemorySize = getMethod("getCommittedVirtualMemorySize");    }    private static class ProcessProbeHolder {        private static final ProcessProbe INSTANCE = new ProcessProbe();    }    public static ProcessProbe getInstance() {        return ProcessProbeHolder.INSTANCE;    }    private ProcessProbe() {    }    /**     * Returns the maximum number of file descriptors allowed on the system, or -1 if not supported.     */    public long getMaxFileDescriptorCount() {        if (getMaxFileDescriptorCountField == null) {            return -1;        }        try {            return (Long) getMaxFileDescriptorCountField.invoke(osMxBean);        } catch (Exception t) {            return -1;        }    }    /**     * Returns the number of opened file descriptors associated with the current process, or -1 if not supported.     */    public long getOpenFileDescriptorCount() {        if (getOpenFileDescriptorCountField == null) {            return -1;        }        try {            return (Long) getOpenFileDescriptorCountField.invoke(osMxBean);        } catch (Exception t) {            return -1;        }    }    /**     * Returns the process CPU usage in percent     */    public short getProcessCpuPercent() {        return Probes.getLoadAndScaleToPercent(getProcessCpuLoad, osMxBean);    }    /**     * Returns the CPU time (in milliseconds) used by the process on which the Java virtual machine is running, or -1 if not supported.     */    public long getProcessCpuTotalTime() {        if (getProcessCpuTime != null) {            try {                long time = (long) getProcessCpuTime.invoke(osMxBean);                if (time >= 0) {                    return (time / 1_000_000L);                }            } catch (Exception t) {                return -1;            }        }        return -1;    }    /**     * Returns the size (in bytes) of virtual memory that is guaranteed to be available to the running process     */    public long getTotalVirtualMemorySize() {        if (getCommittedVirtualMemorySize != null) {            try {                long virtual = (long) getCommittedVirtualMemorySize.invoke(osMxBean);                if (virtual >= 0) {                    return virtual;                }            } catch (Exception t) {                return -1;            }        }        return -1;    }    public ProcessInfo processInfo(long refreshInterval) {        return new ProcessInfo(jvmInfo().pid(), BootstrapInfo.isMemoryLocked(), refreshInterval);    }    public ProcessStats processStats() {        ProcessStats.Cpu cpu = new ProcessStats.Cpu(getProcessCpuPercent(), getProcessCpuTotalTime());        ProcessStats.Mem mem = new ProcessStats.Mem(getTotalVirtualMemorySize());        return new ProcessStats(System.currentTimeMillis(), getOpenFileDescriptorCount(), getMaxFileDescriptorCount(), cpu, mem);    }    /**     * Returns a given method of the OperatingSystemMXBean,     * or null if the method is not found or unavailable.     */    private static Method getMethod(String methodName) {        try {            return Class.forName("com.sun.management.OperatingSystemMXBean").getMethod(methodName);        } catch (Exception t) {            // not available            return null;        }    }    /**     * Returns a given method of the UnixOperatingSystemMXBean,     * or null if the method is not found or unavailable.     */    private static Method getUnixMethod(String methodName) {        try {            return Class.forName("com.sun.management.UnixOperatingSystemMXBean").getMethod(methodName);        } catch (Exception t) {            // not available            return null;        }    }}复制代码
  • ProcessProbe使用static代码块反射获取了getMaxFileDescriptorCountField、getOpenFileDescriptorCountField、getProcessCpuLoad、getProcessCpuTime、getCommittedVirtualMemorySize这几个method
  • getMaxFileDescriptorCountField、getOpenFileDescriptorCountField使用getUnixMethod方法,从com.sun.management.UnixOperatingSystemMXBean获取
  • getProcessCpuLoad、getProcessCpuTime、getCommittedVirtualMemorySize使用getMethod方法,从com.sun.management.OperatingSystemMXBean获取
  • getMaxFileDescriptorCount、getOpenFileDescriptorCount、getProcessCpuTotalTime、getTotalVirtualMemorySize方法首先都判断对应的method是否为null,如果为null则返回-1,否则则反射获取对应的值,出现异常的话,返回-1
  • processStats方法返回ProcessStats,它由ProcessStats.Cpu、ProcessStats.Mem、getOpenFileDescriptorCount()、getMaxFileDescriptorCount()构成

小结

  • ProcessProbe使用static代码块反射获取了getMaxFileDescriptorCountField、getOpenFileDescriptorCountField、getProcessCpuLoad、getProcessCpuTime、getCommittedVirtualMemorySize这几个method
  • getMaxFileDescriptorCount、getOpenFileDescriptorCount、getProcessCpuTotalTime、getTotalVirtualMemorySize方法首先都判断对应的method是否为null,如果为null则返回-1,否则则反射获取对应的值,出现异常的话,返回-1
  • processStats方法返回ProcessStats,它由ProcessStats.Cpu、ProcessStats.Mem、getOpenFileDescriptorCount()、getMaxFileDescriptorCount()构成

doc

转载于:https://juejin.im/post/5ce418e96fb9a07eea324853

你可能感兴趣的文章
中国人工智能学会通讯——深度学习的迁移模型 一、迁移学习的三大优点
查看>>
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
《中国人工智能学会通讯》——12.16 时空众包工作流程
查看>>
英国脱欧:3/4的技术初创公司将面临严峻时期
查看>>
JavaScript API 设计原则
查看>>
WiFi信号可进行隔墙观测 透过衣服观察人体轮廓
查看>>
蓝点数据携手北京大数据产业人才实训基地培养大数据人才
查看>>
数据价值无上限!Windows如何保护重要文件
查看>>
黑客大赛GeekPwn攻破主流厂商众多产品
查看>>
中国通信业抱团 加快布局5G时代
查看>>
创业公司做数据分析(四)ELK日志系统
查看>>
如何在Linux中压缩及解压缩.bz2文件
查看>>
数据为王的时代 大数据对消费金融的影响
查看>>
万事达启动“用你自己替代密码”计划
查看>>
阿里巴巴“NASA计划”新进展:一个世界纪录!
查看>>
Linux下使用USB网络
查看>>
5G标准化进程提速 射频器件市场空间将打开
查看>>
《分布式系统:概念与设计》一3.3.6 拥塞控制
查看>>
“烧烤模式”下 安防设备如何经得住考验?
查看>>
人工智能时代,语音技术怎么赚钱?
查看>>