Skip to content

Commit 4864c95

Browse files
committed
fetch heap & nonHeap memory metrics together
1 parent a411663 commit 4864c95

File tree

7 files changed

+111
-70
lines changed

7 files changed

+111
-70
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 SpringProcessConnectorService.MEMORY: {
308+
case SpringProcessConnectorService.HEAP_MEMORY: {
309309
SpringProcessMemoryMetricsLiveData data = connectorService.getMemoryMetricsLiveData(processKey);
310-
return CompletableFuture.completedFuture(data.getMemoryMetrics());
310+
return CompletableFuture.completedFuture(data.getHeapMemoryMetrics());
311311
}
312+
case SpringProcessConnectorService.NON_HEAP_MEMORY: {
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/SpringProcessConnectorService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ public class SpringProcessConnectorService {
3131

3232
private static final String METRICS = "metrics";
3333
public static final String GC_PAUSES = "gcPauses";
34-
public static final String MEMORY = "memory";
34+
public static final String HEAP_MEMORY = "heapMemory";
35+
public static final String NON_HEAP_MEMORY = "nonHeapMemory";
3536

3637
private static final Logger log = LoggerFactory.getLogger(SpringProcessConnectorService.class);
3738

@@ -175,7 +176,7 @@ private void scheduleConnect(ProgressTask progressTask, String processKey, Sprin
175176
progressTask.progressDone();
176177

177178
refreshProcess(new SpringProcessParams(processKey, "", "", ""));
178-
refreshProcess(new SpringProcessParams(processKey, METRICS, MEMORY, "area:heap"));
179+
refreshProcess(new SpringProcessParams(processKey, METRICS, HEAP_MEMORY, "area:heap"));
179180
refreshProcess(new SpringProcessParams(processKey, METRICS, GC_PAUSES, ""));
180181
}
181182
catch (Exception e) {
@@ -236,7 +237,7 @@ private void scheduleRefresh(ProgressTask progressTask, SpringProcessParams spri
236237

237238
try {
238239
progressTask.progressEvent(progressMessage);
239-
if(METRICS.equals(endpoint) && MEMORY.equals(metricName)) {
240+
if(METRICS.equals(endpoint) && (HEAP_MEMORY.equals(metricName) || NON_HEAP_MEMORY.equals(metricName))) {
240241
SpringProcessMemoryMetricsLiveData newMetricsLiveData = connector.refreshMemoryMetrics(this.liveDataProvider.getCurrent(processKey), metricName, springProcessParams.getTags());
241242

242243
if (newMetricsLiveData != null) {

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
@@ -120,8 +120,8 @@ public SpringProcessLiveData retrieveLiveData(ProcessType processType, ActuatorC
120120
public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessType processType, ActuatorConnection connection, String processID, String processName,
121121
SpringProcessLiveData currentData, String metricName, String tags) {
122122

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

126126
try {
127127

@@ -137,34 +137,16 @@ public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessT
137137
}
138138
}
139139

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

161-
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
162143
return new SpringProcessMemoryMetricsLiveData(
163144
processType,
164145
processName,
165146
processID,
166-
res
167-
);
147+
heapMemResults,
148+
nonHeapMemResults
149+
);
168150
}
169151
catch (Exception e) {
170152
log.error("error reading live metrics data from: " + processID + " - " + processName, e);
@@ -173,6 +155,36 @@ public SpringProcessMemoryMetricsLiveData retrieveLiveMemoryMetricsData(ProcessT
173155
return null;
174156
}
175157

158+
private LiveMemoryMetricsModel[] getMemoryMetrics(ActuatorConnection connection,
159+
List<LiveMemoryMetricsModel> memoryMetricsList, String tags) {
160+
161+
List<String> memoryMetrics = Arrays.asList("jvm.memory.committed", "jvm.memory.max");
162+
163+
LiveMemoryMetricsModel jvmMemUsedMetrics = getLiveMetrics(connection, "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, "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, metric, tags );
178+
if(metrics != null) {
179+
memoryMetricsList.add(metrics);
180+
}
181+
}
182+
}
183+
184+
LiveMemoryMetricsModel[] res = (LiveMemoryMetricsModel[]) memoryMetricsList.toArray(new LiveMemoryMetricsModel[memoryMetricsList.size()]);
185+
return res;
186+
}
187+
176188
/**
177189
* @param processType
178190
* @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)