From 1618e3c7affefc2018aa47b6c4dd4ea4211a1b11 Mon Sep 17 00:00:00 2001 From: Jerry James Date: Tue, 5 Nov 2013 21:33:12 -0700 Subject: [PATCH] Get the CPU frequency from the "cpu MHz" field in /proc/cpuinfo instead of by parsing the model field. --- .../jezhumble/javasysmon/LinuxMonitor.java | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/jezhumble/javasysmon/LinuxMonitor.java b/src/main/java/com/jezhumble/javasysmon/LinuxMonitor.java index 6623f93..f2ccf0f 100644 --- a/src/main/java/com/jezhumble/javasysmon/LinuxMonitor.java +++ b/src/main/java/com/jezhumble/javasysmon/LinuxMonitor.java @@ -3,7 +3,6 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.Method; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; @@ -28,7 +27,7 @@ class LinuxMonitor implements Monitor { private static final Pattern NUM_CPU_PATTERN = Pattern.compile("processor\\s+:\\s+(\\d+)", Pattern.MULTILINE); private static final Pattern CPU_FREQ_PATTERN = - Pattern.compile("model name[^@]*@\\s+([0-9.A-Za-z]*)", Pattern.MULTILINE); + Pattern.compile("cpu MHz\\s+:\\s+([0-9.]*)", Pattern.MULTILINE); private static final Pattern UPTIME_PATTERN = Pattern.compile("([\\d]*).*"); private static final Pattern PID_PATTERN = @@ -98,10 +97,8 @@ public int numCpus() { public long cpuFrequencyInHz() { String cpuFrequencyAsString = fileUtils.runRegexOnFile(CPU_FREQ_PATTERN, "/proc/cpuinfo"); - int strLen = cpuFrequencyAsString.length(); - BigDecimal cpuFrequency = new BigDecimal(cpuFrequencyAsString.substring(0, strLen - 3)); - long multiplier = getMultiplier(cpuFrequencyAsString.charAt(strLen - 3)); - return cpuFrequency.multiply(new BigDecimal(Long.toString(multiplier))).longValue(); + double mhz = Double.parseDouble(cpuFrequencyAsString); + return (long)(mhz * 1000000.0); } public long uptimeInSeconds() { @@ -157,18 +154,6 @@ public void killProcess(int pid) { } } - private long getMultiplier(char multiplier) { - switch (multiplier) { - case 'G': - return 1000000000; - case 'M': - return 1000000; - case 'k': - return 1000; - } - return 0; - } - private long toMillis(long jiffies) { int multiplier = 1000 / userHz; return jiffies * multiplier;