内容简介:本文主要研究一下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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
游戏化思维
[美] 凯文·韦巴赫(Kevin Werbach)、[美] 丹·亨特(Dan Hunter) / 周逵、王晓丹 / 浙江人民出版社 / 2014-4 / 36.90
[内容简介] ●本书由开设了全世界第一个游戏化课程的沃顿商学院副教授凯文·韦巴赫和丹·亨特所著,第一次全面系统地介绍游戏化的理论,阐述了如何将游戏的理念应用到商业实践中。 ●作者指出,在商业竞争日益激烈的今天,传统的激励方式渐渐失效,未来的管理将更多地建立在员工和消费者的内在动机和自我激励上。这些制作精良、设计巧妙的游戏建立在多年来对人类动机和人类心理的研究基础之上,可以最大限度地激发......一起来看看 《游戏化思维》 这本书的介绍吧!