fetch heap & nonHeap memory metrics together
This commit is contained in:
@@ -305,10 +305,14 @@ public class SpringProcessCommandHandler {
|
||||
SpringProcessGcPausesMetricsLiveData data = connectorService.getGcPausesMetricsLiveData(processKey);
|
||||
return CompletableFuture.completedFuture(data.getGcPausesMetrics());
|
||||
}
|
||||
case SpringProcessConnectorService.MEMORY: {
|
||||
case SpringProcessConnectorService.HEAP_MEMORY: {
|
||||
SpringProcessMemoryMetricsLiveData data = connectorService.getMemoryMetricsLiveData(processKey);
|
||||
return CompletableFuture.completedFuture(data.getMemoryMetrics());
|
||||
return CompletableFuture.completedFuture(data.getHeapMemoryMetrics());
|
||||
}
|
||||
case SpringProcessConnectorService.NON_HEAP_MEMORY: {
|
||||
SpringProcessMemoryMetricsLiveData data = connectorService.getMemoryMetricsLiveData(processKey);
|
||||
return CompletableFuture.completedFuture(data.getNonHeapMemoryMetrics());
|
||||
}
|
||||
default: {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,7 +149,8 @@ public class SpringProcessConnectorOverHttp implements SpringProcessConnector {
|
||||
this.processName = liveData.getProcessName();
|
||||
}
|
||||
|
||||
if (liveData != null && liveData.getMemoryMetrics() != null && liveData.getMemoryMetrics().length > 0) {
|
||||
if (liveData != null && liveData.getHeapMemoryMetrics() != null && liveData.getHeapMemoryMetrics().length > 0 &&
|
||||
liveData.getNonHeapMemoryMetrics() != null && liveData.getNonHeapMemoryMetrics().length > 0) {
|
||||
return liveData;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,7 +159,8 @@ public class SpringProcessConnectorOverJMX implements SpringProcessConnector {
|
||||
log.info("retrieve live data from: " + jmxURL);
|
||||
SpringProcessMemoryMetricsLiveData liveData = springJMXConnector.retrieveLiveMemoryMetricsData(getProcessType(), jmxConnection, processID, processName, currentData, metricName, tags);
|
||||
|
||||
if (liveData != null && liveData.getMemoryMetrics() != null && liveData.getMemoryMetrics().length > 0) {
|
||||
if (liveData != null && liveData.getHeapMemoryMetrics() != null && liveData.getHeapMemoryMetrics().length > 0 &&
|
||||
liveData.getNonHeapMemoryMetrics() != null && liveData.getNonHeapMemoryMetrics().length > 0) {
|
||||
return liveData;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,8 @@ public class SpringProcessConnectorService {
|
||||
|
||||
private static final String METRICS = "metrics";
|
||||
public static final String GC_PAUSES = "gcPauses";
|
||||
public static final String MEMORY = "memory";
|
||||
public static final String HEAP_MEMORY = "heapMemory";
|
||||
public static final String NON_HEAP_MEMORY = "nonHeapMemory";
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(SpringProcessConnectorService.class);
|
||||
|
||||
@@ -175,7 +176,7 @@ public class SpringProcessConnectorService {
|
||||
progressTask.progressDone();
|
||||
|
||||
refreshProcess(new SpringProcessParams(processKey, "", "", ""));
|
||||
refreshProcess(new SpringProcessParams(processKey, METRICS, MEMORY, "area:heap"));
|
||||
refreshProcess(new SpringProcessParams(processKey, METRICS, HEAP_MEMORY, "area:heap"));
|
||||
refreshProcess(new SpringProcessParams(processKey, METRICS, GC_PAUSES, ""));
|
||||
}
|
||||
catch (Exception e) {
|
||||
@@ -236,7 +237,7 @@ public class SpringProcessConnectorService {
|
||||
|
||||
try {
|
||||
progressTask.progressEvent(progressMessage);
|
||||
if(METRICS.equals(endpoint) && MEMORY.equals(metricName)) {
|
||||
if(METRICS.equals(endpoint) && (HEAP_MEMORY.equals(metricName) || NON_HEAP_MEMORY.equals(metricName))) {
|
||||
SpringProcessMemoryMetricsLiveData newMetricsLiveData = connector.refreshMemoryMetrics(this.liveDataProvider.getCurrent(processKey), metricName, springProcessParams.getTags());
|
||||
|
||||
if (newMetricsLiveData != null) {
|
||||
|
||||
@@ -120,8 +120,8 @@ public class SpringProcessLiveDataExtractorOverHttp {
|
||||
public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessType processType, ActuatorConnection connection, String processID, String processName,
|
||||
SpringProcessLiveData currentData, String metricName, String tags) {
|
||||
|
||||
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
|
||||
List<LiveMemoryMetricsModel> memoryMetricsList = new ArrayList<>();
|
||||
List<LiveMemoryMetricsModel> heapMemoryMetricsList = new ArrayList<>();
|
||||
List<LiveMemoryMetricsModel> nonHeapMemoryMetricsList = new ArrayList<>();
|
||||
|
||||
try {
|
||||
|
||||
@@ -137,34 +137,16 @@ public class SpringProcessLiveDataExtractorOverHttp {
|
||||
}
|
||||
}
|
||||
|
||||
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, "jvm.memory.used", tags);
|
||||
if(jvmMemUsedMetrics != null) {
|
||||
memoryMetricsList.add(jvmMemUsedMetrics);
|
||||
Arrays.sort(jvmMemUsedMetrics.getAvailableTags()[0].getValues());
|
||||
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
|
||||
for(String zone : memoryZones) {
|
||||
String tag = tags+",id:"+zone;
|
||||
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, "jvm.memory.used", tag );
|
||||
if(metrics != null) {
|
||||
memoryMetricsList.add(metrics);
|
||||
}
|
||||
}
|
||||
LiveMemoryMetricsModel[] heapMemResults = getMemoryMetrics(connection, heapMemoryMetricsList, "area:heap");
|
||||
LiveMemoryMetricsModel[] nonHeapMemResults = getMemoryMetrics(connection, nonHeapMemoryMetricsList, "area:nonheap");
|
||||
|
||||
for(String metric : memoryMetrics) {
|
||||
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, metric, tags );
|
||||
if(metrics != null) {
|
||||
memoryMetricsList.add(metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
|
||||
return new SpringProcessMemoryMetricsLiveData(
|
||||
processType,
|
||||
processName,
|
||||
processID,
|
||||
res
|
||||
);
|
||||
heapMemResults,
|
||||
nonHeapMemResults
|
||||
);
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.error("error reading live metrics data from: " + processID + " - " + processName, e);
|
||||
@@ -173,6 +155,36 @@ public class SpringProcessLiveDataExtractorOverHttp {
|
||||
return null;
|
||||
}
|
||||
|
||||
private LiveMemoryMetricsModel[] getMemoryMetrics(ActuatorConnection connection,
|
||||
List<LiveMemoryMetricsModel> memoryMetricsList, String tags) {
|
||||
|
||||
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
|
||||
|
||||
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, "jvm.memory.used", tags);
|
||||
if(jvmMemUsedMetrics != null) {
|
||||
memoryMetricsList.add(jvmMemUsedMetrics);
|
||||
Arrays.sort(jvmMemUsedMetrics.getAvailableTags()[0].getValues());
|
||||
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
|
||||
for(String zone : memoryZones) {
|
||||
String tag = tags+",id:"+zone;
|
||||
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, "jvm.memory.used", tag );
|
||||
if(metrics != null) {
|
||||
memoryMetricsList.add(metrics);
|
||||
}
|
||||
}
|
||||
|
||||
for(String metric : memoryMetrics) {
|
||||
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, metric, tags );
|
||||
if(metrics != null) {
|
||||
memoryMetricsList.add(metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param processType
|
||||
* @param processID if null, will be determined searching existing mbeans for that information (for remote processes via platform beans runtime name)
|
||||
|
||||
@@ -141,11 +141,10 @@ public class SpringProcessLiveDataExtractorOverJMX {
|
||||
public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessType processType, JMXConnector jmxConnector, String processID, String processName,
|
||||
SpringProcessLiveData currentData, String metricName, String tags) {
|
||||
|
||||
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
|
||||
|
||||
try {
|
||||
MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
|
||||
List<LiveMemoryMetricsModel> memoryMetricsList = new ArrayList<>();
|
||||
List<LiveMemoryMetricsModel> heapMemoryMetricsList = new ArrayList<>();
|
||||
List<LiveMemoryMetricsModel> nonHeapMemoryMetricsList = new ArrayList<>();
|
||||
String domain = getDomainForActuator(connection);
|
||||
|
||||
if (processID == null) {
|
||||
@@ -160,34 +159,19 @@ public class SpringProcessLiveDataExtractorOverJMX {
|
||||
}
|
||||
}
|
||||
|
||||
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, domain, "jvm.memory.used", tags);
|
||||
if(jvmMemUsedMetrics != null ) {
|
||||
memoryMetricsList.add(jvmMemUsedMetrics);
|
||||
Arrays.sort(jvmMemUsedMetrics.getAvailableTags()[0].getValues());
|
||||
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
|
||||
for(String zone : memoryZones) {
|
||||
String tag = tags+",id:"+zone;
|
||||
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, "jvm.memory.used", tag );
|
||||
if(metrics != null) {
|
||||
memoryMetricsList.add(metrics);
|
||||
}
|
||||
}
|
||||
|
||||
for(String metric : memoryMetrics) {
|
||||
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, metric, tags );
|
||||
if(metrics != null) {
|
||||
memoryMetricsList.add(metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
LiveMemoryMetricsModel[] heapMemResults = getMemoryMetrics(connection, heapMemoryMetricsList,
|
||||
domain, "area:heap");
|
||||
|
||||
LiveMemoryMetricsModel[] nonHeapMemResults = getMemoryMetrics(connection, nonHeapMemoryMetricsList,
|
||||
domain, "area:nonheap");
|
||||
|
||||
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
|
||||
return new SpringProcessMemoryMetricsLiveData(
|
||||
processType,
|
||||
processName,
|
||||
processID,
|
||||
res
|
||||
);
|
||||
heapMemResults,
|
||||
nonHeapMemResults
|
||||
);
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.error("error reading live metrics data from: " + processID + " - " + processName, e);
|
||||
@@ -196,6 +180,37 @@ public class SpringProcessLiveDataExtractorOverJMX {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private LiveMemoryMetricsModel[] getMemoryMetrics(MBeanServerConnection connection,
|
||||
List<LiveMemoryMetricsModel> memoryMetricsList, String domain, String tags) {
|
||||
|
||||
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
|
||||
|
||||
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, domain, "jvm.memory.used", tags);
|
||||
if(jvmMemUsedMetrics != null ) {
|
||||
memoryMetricsList.add(jvmMemUsedMetrics);
|
||||
Arrays.sort(jvmMemUsedMetrics.getAvailableTags()[0].getValues());
|
||||
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
|
||||
for(String zone : memoryZones) {
|
||||
String tag = tags+",id:"+zone;
|
||||
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, "jvm.memory.used", tag );
|
||||
if(metrics != null) {
|
||||
memoryMetricsList.add(metrics);
|
||||
}
|
||||
}
|
||||
|
||||
for(String metric : memoryMetrics) {
|
||||
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, metric, tags );
|
||||
if(metrics != null) {
|
||||
memoryMetricsList.add(metrics);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param processType
|
||||
* @param processID if null, will be determined searching existing mbeans for that information (for remote processes via platform beans runtime name)
|
||||
|
||||
@@ -11,25 +11,28 @@
|
||||
package org.springframework.ide.vscode.boot.java.livehover.v2;
|
||||
|
||||
/**
|
||||
* @author V Udayani
|
||||
* @author V Udayani
|
||||
*/
|
||||
public class SpringProcessMemoryMetricsLiveData {
|
||||
|
||||
|
||||
private final ProcessType processType;
|
||||
private final String processName;
|
||||
private final String processID;
|
||||
|
||||
private final LiveMemoryMetricsModel[] memoryMetrics;
|
||||
|
||||
public SpringProcessMemoryMetricsLiveData(ProcessType processType, String processName, String processID, LiveMemoryMetricsModel[] memoryMetrics) {
|
||||
|
||||
private final LiveMemoryMetricsModel[] heapMemoryMetrics;
|
||||
|
||||
private final LiveMemoryMetricsModel[] nonHeapMemoryMetrics;
|
||||
|
||||
public SpringProcessMemoryMetricsLiveData(ProcessType processType, String processName, String processID,
|
||||
LiveMemoryMetricsModel[] heapMemoryMetrics, LiveMemoryMetricsModel[] nonHeapMemoryMetrics) {
|
||||
super();
|
||||
this.processType = processType;
|
||||
this.processName = processName;
|
||||
this.processID = processID;
|
||||
this.memoryMetrics = memoryMetrics;
|
||||
|
||||
this.heapMemoryMetrics = heapMemoryMetrics;
|
||||
this.nonHeapMemoryMetrics = nonHeapMemoryMetrics;
|
||||
}
|
||||
|
||||
|
||||
public ProcessType getProcessType() {
|
||||
return processType;
|
||||
}
|
||||
@@ -41,9 +44,13 @@ public class SpringProcessMemoryMetricsLiveData {
|
||||
public String getProcessID() {
|
||||
return this.processID;
|
||||
}
|
||||
|
||||
public LiveMemoryMetricsModel[] getMemoryMetrics() {
|
||||
return this.memoryMetrics;
|
||||
|
||||
public LiveMemoryMetricsModel[] getHeapMemoryMetrics() {
|
||||
return this.heapMemoryMetrics;
|
||||
}
|
||||
|
||||
public LiveMemoryMetricsModel[] getNonHeapMemoryMetrics() {
|
||||
return nonHeapMemoryMetrics;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user