Skip to content

Commit b2af04b

Browse files
committed
fetch heap & nonHeap memory metrics together
1 parent 8350c5b commit b2af04b

File tree

6 files changed

+107
-67
lines changed

6 files changed

+107
-67
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,10 +305,14 @@ private CompletableFuture<Object> handleLiveMetricsProcessRequest(ExecuteCommand
305305
SpringProcessGcPausesMetricsLiveData data = connectorService.getGcPausesMetricsLiveData(processKey);
306306
return CompletableFuture.completedFuture(data.getGcPausesMetrics());
307307
}
308-
case "memory": {
308+
case "heapMemory": {
309309
SpringProcessMemoryMetricsLiveData data = connectorService.getMemoryMetricsLiveData(processKey);
310-
return CompletableFuture.completedFuture(data.getMemoryMetrics());
310+
return CompletableFuture.completedFuture(data.getHeapMemoryMetrics());
311311
}
312+
case "nonHeapMemory": {
313+
SpringProcessMemoryMetricsLiveData data = connectorService.getMemoryMetricsLiveData(processKey);
314+
return CompletableFuture.completedFuture(data.getNonHeapMemoryMetrics());
315+
}
312316
default: {}
313317
}
314318
}

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorOverHttp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ public SpringProcessMemoryMetricsLiveData refreshMemoryMetrics(SpringProcessLive
149149
this.processName = liveData.getProcessName();
150150
}
151151

152-
if (liveData != null && liveData.getMemoryMetrics() != null && liveData.getMemoryMetrics().length > 0) {
152+
if (liveData != null && liveData.getHeapMemoryMetrics() != null && liveData.getHeapMemoryMetrics().length > 0 &&
153+
liveData.getNonHeapMemoryMetrics() != null && liveData.getNonHeapMemoryMetrics().length > 0) {
153154
return liveData;
154155
}
155156
}

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorOverJMX.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ public SpringProcessMemoryMetricsLiveData refreshMemoryMetrics(SpringProcessLive
159159
log.info("retrieve live data from: " + jmxURL);
160160
SpringProcessMemoryMetricsLiveData liveData = springJMXConnector.retrieveLiveMemoryMetricsData(getProcessType(), jmxConnection, processID, processName, currentData, metricName, tags);
161161

162-
if (liveData != null && liveData.getMemoryMetrics() != null && liveData.getMemoryMetrics().length > 0) {
162+
if (liveData != null && liveData.getHeapMemoryMetrics() != null && liveData.getHeapMemoryMetrics().length > 0 &&
163+
liveData.getNonHeapMemoryMetrics() != null && liveData.getNonHeapMemoryMetrics().length > 0) {
163164
return liveData;
164165
}
165166
}

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessLiveDataExtractorOverHttp.java

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ public SpringProcessLiveData retrieveLiveData(ProcessType processType, ActuatorC
118118
public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessType processType, ActuatorConnection connection, String processID, String processName,
119119
SpringProcessLiveData currentData, String metricName, String tags) {
120120

121-
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
122-
List<LiveMemoryMetricsModel> memoryMetricsList = new ArrayList<>();
121+
List<LiveMemoryMetricsModel> heapMemoryMetricsList = new ArrayList<>();
122+
List<LiveMemoryMetricsModel> nonHeapMemoryMetricsList = new ArrayList<>();
123123

124124
try {
125125

@@ -135,34 +135,16 @@ public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessT
135135
}
136136
}
137137

138-
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, "jvm.memory.used", tags);
139-
if(jvmMemUsedMetrics != null) {
140-
memoryMetricsList.add(jvmMemUsedMetrics);
141-
Arrays.sort(jvmMemUsedMetrics.getAvailableTags()[0].getValues());
142-
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
143-
for(String zone : memoryZones) {
144-
String tag = tags+",id:"+zone;
145-
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, "jvm.memory.used", tag );
146-
if(metrics != null) {
147-
memoryMetricsList.add(metrics);
148-
}
149-
}
150-
151-
for(String metric : memoryMetrics) {
152-
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, metric, tags );
153-
if(metrics != null) {
154-
memoryMetricsList.add(metrics);
155-
}
156-
}
157-
}
138+
LiveMemoryMetricsModel[] heapMemResults = getMemoryMetrics(connection, heapMemoryMetricsList, "area:heap");
139+
LiveMemoryMetricsModel[] nonHeapMemResults = getMemoryMetrics(connection, nonHeapMemoryMetricsList, "area:nonheap");
158140

159-
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
160141
return new SpringProcessMemoryMetricsLiveData(
161142
processType,
162143
processName,
163144
processID,
164-
res
165-
);
145+
heapMemResults,
146+
nonHeapMemResults
147+
);
166148
}
167149
catch (Exception e) {
168150
log.error("error reading live metrics data from: " + processID + " - " + processName, e);
@@ -171,6 +153,36 @@ public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessT
171153
return null;
172154
}
173155

156+
private LiveMemoryMetricsModel[] getMemoryMetrics(ActuatorConnection connection,
157+
List<LiveMemoryMetricsModel> memoryMetricsList, String tags) {
158+
159+
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
160+
161+
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, "jvm.memory.used", tags);
162+
if(jvmMemUsedMetrics != null) {
163+
memoryMetricsList.add(jvmMemUsedMetrics);
164+
Arrays.sort(jvmMemUsedMetrics.getAvailableTags()[0].getValues());
165+
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
166+
for(String zone : memoryZones) {
167+
String tag = tags+",id:"+zone;
168+
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, "jvm.memory.used", tag );
169+
if(metrics != null) {
170+
memoryMetricsList.add(metrics);
171+
}
172+
}
173+
174+
for(String metric : memoryMetrics) {
175+
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, metric, tags );
176+
if(metrics != null) {
177+
memoryMetricsList.add(metrics);
178+
}
179+
}
180+
}
181+
182+
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
183+
return res;
184+
}
185+
174186
/**
175187
* @param processType
176188
* @param processID if null, will be determined searching existing mbeans for that information (for remote processes via platform beans runtime name)

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessLiveDataExtractorOverJMX.java

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,10 @@ public SpringProcessLiveData retrieveLiveData(ProcessType processType, JMXConnec
141141
public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessType processType, JMXConnector jmxConnector, String processID, String processName,
142142
SpringProcessLiveData currentData, String metricName, String tags) {
143143

144-
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
145-
146144
try {
147145
MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
148-
List<LiveMemoryMetricsModel> memoryMetricsList = new ArrayList<>();
146+
List<LiveMemoryMetricsModel> heapMemoryMetricsList = new ArrayList<>();
147+
List<LiveMemoryMetricsModel> nonHeapMemoryMetricsList = new ArrayList<>();
149148
String domain = getDomainForActuator(connection);
150149

151150
if (processID == null) {
@@ -160,34 +159,19 @@ public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessT
160159
}
161160
}
162161

163-
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, domain, "jvm.memory.used", tags);
164-
if(jvmMemUsedMetrics != null ) {
165-
memoryMetricsList.add(jvmMemUsedMetrics);
166-
Arrays.sort(jvmMemUsedMetrics.getAvailableTags()[0].getValues());
167-
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
168-
for(String zone : memoryZones) {
169-
String tag = tags+",id:"+zone;
170-
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, "jvm.memory.used", tag );
171-
if(metrics != null) {
172-
memoryMetricsList.add(metrics);
173-
}
174-
}
175-
176-
for(String metric : memoryMetrics) {
177-
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, metric, tags );
178-
if(metrics != null) {
179-
memoryMetricsList.add(metrics);
180-
}
181-
}
182-
}
162+
LiveMemoryMetricsModel[] heapMemResults = getMemoryMetrics(connection, heapMemoryMetricsList,
163+
domain, "area:heap");
164+
165+
LiveMemoryMetricsModel[] nonHeapMemResults = getMemoryMetrics(connection, nonHeapMemoryMetricsList,
166+
domain, "area:nonheap");
183167

184-
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
185168
return new SpringProcessMemoryMetricsLiveData(
186169
processType,
187170
processName,
188171
processID,
189-
res
190-
);
172+
heapMemResults,
173+
nonHeapMemResults
174+
);
191175
}
192176
catch (Exception e) {
193177
log.error("error reading live metrics data from: " + processID + " - " + processName, e);
@@ -196,6 +180,37 @@ public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessT
196180
return null;
197181
}
198182

183+
184+
private LiveMemoryMetricsModel[] getMemoryMetrics(MBeanServerConnection connection,
185+
List<LiveMemoryMetricsModel> memoryMetricsList, String domain, String tags) {
186+
187+
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
188+
189+
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, domain, "jvm.memory.used", tags);
190+
if(jvmMemUsedMetrics != null ) {
191+
memoryMetricsList.add(jvmMemUsedMetrics);
192+
Arrays.sort(jvmMemUsedMetrics.getAvailableTags()[0].getValues());
193+
String[] memoryZones = jvmMemUsedMetrics.getAvailableTags()[0].getValues();
194+
for(String zone : memoryZones) {
195+
String tag = tags+",id:"+zone;
196+
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, "jvm.memory.used", tag );
197+
if(metrics != null) {
198+
memoryMetricsList.add(metrics);
199+
}
200+
}
201+
202+
for(String metric : memoryMetrics) {
203+
LiveMemoryMetricsModel metrics = getLiveMetrics(connection, domain, metric, tags );
204+
if(metrics != null) {
205+
memoryMetricsList.add(metrics);
206+
}
207+
}
208+
}
209+
210+
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
211+
return res;
212+
}
213+
199214
/**
200215
* @param processType
201216
* @param processID if null, will be determined searching existing mbeans for that information (for remote processes via platform beans runtime name)

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessMemoryMetricsLiveData.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,28 @@
1111
package org.springframework.ide.vscode.boot.java.livehover.v2;
1212

1313
/**
14-
* @author V Udayani
14+
* @author V Udayani
1515
*/
1616
public class SpringProcessMemoryMetricsLiveData {
17-
17+
1818
private final ProcessType processType;
1919
private final String processName;
2020
private final String processID;
21-
22-
private final LiveMemoryMetricsModel[] memoryMetrics;
23-
24-
public SpringProcessMemoryMetricsLiveData(ProcessType processType, String processName, String processID, LiveMemoryMetricsModel[] memoryMetrics) {
21+
22+
private final LiveMemoryMetricsModel[] heapMemoryMetrics;
23+
24+
private final LiveMemoryMetricsModel[] nonHeapMemoryMetrics;
25+
26+
public SpringProcessMemoryMetricsLiveData(ProcessType processType, String processName, String processID,
27+
LiveMemoryMetricsModel[] heapMemoryMetrics, LiveMemoryMetricsModel[] nonHeapMemoryMetrics) {
2528
super();
2629
this.processType = processType;
2730
this.processName = processName;
2831
this.processID = processID;
29-
this.memoryMetrics = memoryMetrics;
30-
32+
this.heapMemoryMetrics = heapMemoryMetrics;
33+
this.nonHeapMemoryMetrics = nonHeapMemoryMetrics;
3134
}
32-
35+
3336
public ProcessType getProcessType() {
3437
return processType;
3538
}
@@ -41,9 +44,13 @@ public String getProcessName() {
4144
public String getProcessID() {
4245
return this.processID;
4346
}
44-
45-
public LiveMemoryMetricsModel[] getMemoryMetrics() {
46-
return this.memoryMetrics;
47+
48+
public LiveMemoryMetricsModel[] getHeapMemoryMetrics() {
49+
return this.heapMemoryMetrics;
50+
}
51+
52+
public LiveMemoryMetricsModel[] getNonHeapMemoryMetrics() {
53+
return nonHeapMemoryMetrics;
4754
}
4855

4956
}

0 commit comments

Comments
 (0)