aboutsummaryrefslogtreecommitdiffstats
path: root/metrics-proxy/src/main/java/ai/vespa
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-12-15 20:54:42 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2021-12-15 20:54:42 +0100
commit47aa61f921242123db88c4f5334ecce119cfb209 (patch)
tree6d627dffa333bcdb470b5a21010417ffe5d4d524 /metrics-proxy/src/main/java/ai/vespa
parent1427b78c8eb87229ec76b3be2d7f31acf5301d1c (diff)
Add test and benchmark for smaps parsing and avoid using regex.
Diffstat (limited to 'metrics-proxy/src/main/java/ai/vespa')
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java41
1 files changed, 24 insertions, 17 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java
index 7ab3bf2e5a6..22eb2844d61 100644
--- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java
+++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/SystemPoller.java
@@ -5,6 +5,7 @@ import ai.vespa.metricsproxy.metric.Metric;
import ai.vespa.metricsproxy.metric.Metrics;
import ai.vespa.metricsproxy.metric.model.MetricId;
+import java.io.Reader;
import java.time.Duration;
import java.time.Instant;
import java.util.HashMap;
@@ -106,7 +107,6 @@ public class SystemPoller {
* @return array[0] = memoryResident, array[1] = memoryVirtual (kB units)
*/
static long[] getMemoryUsage(VespaService service) {
- long[] size = new long[2];
BufferedReader br;
int pid = service.getPid();
@@ -114,26 +114,33 @@ public class SystemPoller {
br = new BufferedReader(new FileReader("/proc/" + pid + "/smaps"));
} catch (FileNotFoundException ex) {
service.setAlive(false);
- return size;
+ return new long[2];
}
- String line;
try {
- while ((line = br.readLine()) != null) {
-
- /* Memory size is given in kB - convert to bytes by multiply with 1024*/
- if (line.startsWith("Rss:")) {
- String[] elems = line.split("\\s+");
- size[memoryTypeResident] += Long.parseLong(elems[1]) * 1024;
- } else if (line.startsWith("Size:")) {
- String[] elems = line.split("\\s+");
- size[memoryTypeVirtual] += Long.parseLong(elems[1]) * 1024;
- }
- }
-
- br.close();
+ return getMemoryUsage(br);
} catch (IOException ex) {
log.log(Level.FINE, "Unable to read line from smaps file", ex);
- return size;
+ return new long[2];
+ } finally {
+ try {
+ br.close();
+ } catch (IOException ex) {
+ log.log(Level.FINE, "Closing of smaps file failed", ex);
+ }
+ }
+ }
+ static long[] getMemoryUsage(BufferedReader br) throws IOException{
+ String line;
+ long[] size = new long[2];
+ while ((line = br.readLine()) != null) {
+ /* Memory size is given in kB - convert to bytes by multiply with 1024*/
+ if (line.startsWith("Rss:")) {
+ String remain = line.substring(4).trim();
+ size[memoryTypeResident] += Long.parseLong(remain.substring(0, remain.indexOf(' '))) * 1024;
+ } else if (line.startsWith("Size:")) {
+ String remain = line.substring(5).trim();
+ size[memoryTypeVirtual] += Long.parseLong(remain.substring(0, remain.indexOf(' '))) * 1024;
+ }
}
return size;