内容简介:本文主要研究一下Elasticsearch的ProcessProbeelasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java
序
本文主要研究一下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
以上所述就是小编给大家介绍的《聊聊Elasticsearch的ProcessProbe》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据时代的算法:机器学习、人工智能及其典型实例
刘凡平 / 电子工业出版社 / 2017-1 / 49
《大数据时代的算法:机器学习、人工智能及其典型实例》介绍在互联网行业中经常涉及的算法,包括排序算法、查找算法、资源分配算法、路径分析算法、相似度分析算法,以及与机器学习相关的算法,包括数据分类算法、聚类算法、预测与估算算法、决策算法、关联规则分析算法及推荐算法。《大数据时代的算法:机器学习、人工智能及其典型实例》涉及的相关算法均为解决实际问题中的主流算法,对于工作和学习都有实际参考意义。 《......一起来看看 《大数据时代的算法:机器学习、人工智能及其典型实例》 这本书的介绍吧!