|
|
@@ -0,0 +1,113 @@
|
|
|
+package cn.reghao.autodop.common.sysstat;
|
|
|
+
|
|
|
+import cn.reghao.autodop.common.sysstat.contant.ProcFile;
|
|
|
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemStat;
|
|
|
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemUsage;
|
|
|
+import cn.reghao.autodop.common.sysstat.pojo.memory.MemoryInfo;
|
|
|
+import cn.reghao.autodop.common.sysstat.utils.AbstractPercentageCalculator;
|
|
|
+import cn.reghao.autodop.common.sysstat.utils.ByteConvert;
|
|
|
+import cn.reghao.autodop.common.sysstat.utils.ByteType;
|
|
|
+import cn.reghao.autodop.common.sysstat.utils.MemCalculator;
|
|
|
+import cn.reghao.autodop.common.utils.text.TextFile;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 内存
|
|
|
+ *
|
|
|
+ * @author reghao
|
|
|
+ * @date 2019-10-25 13:21:25
|
|
|
+ */
|
|
|
+public class Memory {
|
|
|
+ private AbstractPercentageCalculator<MemStat> calculator = new MemCalculator();
|
|
|
+ private TextFile textFile = new TextFile();
|
|
|
+
|
|
|
+ public MemoryInfo info() {
|
|
|
+ ByteConvert convert = new ByteConvert();
|
|
|
+ Map<String, String> map = parseMemInfo();
|
|
|
+
|
|
|
+ double total = Double.parseDouble(map.get("MemTotal").split("kB")[0]);
|
|
|
+ double free = Double.parseDouble(map.get("MemFree").split("kB")[0]);
|
|
|
+ double shared = Double.parseDouble(map.get("Shmem").split("kB")[0]);
|
|
|
+ double buffers = Double.parseDouble(map.get("Buffers").split("kB")[0]);
|
|
|
+ double cached = Double.parseDouble(map.get("Cached").split("kB")[0]) +
|
|
|
+ Double.parseDouble(map.get("SReclaimable").split("kB")[0]);
|
|
|
+ double buffCache = buffers + cached;
|
|
|
+ double available = Double.parseDouble(map.get("MemAvailable").split("kB")[0]);
|
|
|
+ double used = total - free - buffCache;
|
|
|
+
|
|
|
+ double swapTotal = Double.parseDouble(map.get("SwapTotal").split("kB")[0]);
|
|
|
+ double swapUnused = Double.parseDouble(map.get("SwapFree").split("kB")[0]);
|
|
|
+ double swapUsed = swapTotal - swapUnused;
|
|
|
+
|
|
|
+ MemoryInfo memoryInfo = new MemoryInfo();
|
|
|
+ memoryInfo.setTotal(convert.convert(total, ByteType.KiB));
|
|
|
+ memoryInfo.setUsed(convert.convert(used, ByteType.KiB));
|
|
|
+ memoryInfo.setFree(convert.convert(free, ByteType.KiB));
|
|
|
+ memoryInfo.setShared(convert.convert(shared, ByteType.KiB));
|
|
|
+ memoryInfo.setBuffCache(convert.convert(buffCache, ByteType.KiB));
|
|
|
+ memoryInfo.setAvailable(convert.convert(available, ByteType.KiB));
|
|
|
+
|
|
|
+ memoryInfo.setSwapTotal(convert.convert(swapTotal, ByteType.KiB));
|
|
|
+ memoryInfo.setSwapUsed(convert.convert(swapUsed, ByteType.KiB));
|
|
|
+ memoryInfo.setSwapFree(convert.convert(swapUnused, ByteType.KiB));
|
|
|
+ return memoryInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, String> parseMemInfo() {
|
|
|
+ String info = textFile.readFile(ProcFile.MEM_INFO);
|
|
|
+ Map<String, String> map = new LinkedHashMap<>();
|
|
|
+ for (String line : info.split(System.lineSeparator())) {
|
|
|
+ String[] strs = line.replace("\t", "").split(":");
|
|
|
+ map.put(strs[0], strs[1].replace(" ", ""));
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * free -h 命令
|
|
|
+ *
|
|
|
+ * @param
|
|
|
+ * @return
|
|
|
+ * @date 2020-03-19 下午7:21
|
|
|
+ */
|
|
|
+ public MemUsage free() {
|
|
|
+ MemStat memStat = stat();
|
|
|
+ return (MemUsage) calculator.format(memStat, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ private MemStat stat() {
|
|
|
+ String[] info = textFile.readFile(ProcFile.MEM_INFO).replace(" ", "").split(System.lineSeparator());
|
|
|
+ Map<String, Long> map = new HashMap<>(info.length);
|
|
|
+ for (String s : info) {
|
|
|
+ String[] kv = s.split(":");
|
|
|
+ String key = kv[0];
|
|
|
+ String value = kv[1].split("kB")[0];
|
|
|
+ map.put(key, Long.parseLong(value));
|
|
|
+ }
|
|
|
+
|
|
|
+ MemStat memStat = new MemStat();
|
|
|
+ memStat.setMemTotal(map.get("MemTotal"));
|
|
|
+ memStat.setMemFree(map.get("MemFree"));
|
|
|
+ memStat.setShared(map.get("Shmem"));
|
|
|
+ memStat.setBuffers(map.get("Buffers"));
|
|
|
+ memStat.setCached(map.get("Cached") + map.get("SReclaimable"));
|
|
|
+ memStat.setMemAvailable(map.get("MemAvailable"));
|
|
|
+ memStat.setSwapTotal(map.get("SwapTotal"));
|
|
|
+ memStat.setSwapFree(map.get("SwapFree"));
|
|
|
+
|
|
|
+ return memStat;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) throws InterruptedException {
|
|
|
+ Memory mem = new Memory();
|
|
|
+ mem.info();
|
|
|
+ /*while (true) {
|
|
|
+ Thread.sleep(1_000);
|
|
|
+ log.info("mem -> {}", mem.free());
|
|
|
+ }*/
|
|
|
+ }
|
|
|
+}
|