如何获得Java7 App的CPU,RAM和网络使用率

如何获得Java7 App的CPU,RAM和网络使用率,第1张

如何获得Java7 App的CPU,RAM和网络使用率

回答我自己的问题;我写了一些代码…

网络数据

public class NetworkData {    static Map<String, Long> rxCurrentMap = new HashMap<String, Long>();    static Map<String, List<Long>> rxChangeMap = new HashMap<String, List<Long>>();    static Map<String, Long> txCurrentMap = new HashMap<String, Long>();    static Map<String, List<Long>> txChangeMap = new HashMap<String, List<Long>>();    private static Sigar sigar;        public NetworkData(Sigar s) throws SigarException, InterruptedException {        sigar = s;        getMetric();        System.out.println(networkInfo());        Thread.sleep(1000);         }    public static void main(String[] args) throws SigarException, InterruptedException {        new NetworkData(new Sigar());        NetworkData.startMetricTest();    }    public static String networkInfo() throws SigarException {        String info = sigar.getNetInfo().toString();        info += "n"+ sigar.getNetInterfaceConfig().toString();        return info;    }    public static String getDefaultGateway() throws SigarException {        return sigar.getNetInfo().getDefaultGateway();    }    public static void startMetricTest() throws SigarException, InterruptedException {        while (true) { Long[] m = getMetric(); long totalrx = m[0]; long totaltx = m[1]; System.out.print("totalrx(download): "); System.out.println("t" + Sigar.formatSize(totalrx)); System.out.print("totaltx(upload): "); System.out.println("t" + Sigar.formatSize(totaltx)); System.out.println("-----------------------------------"); Thread.sleep(1000);        }    }    public static Long[] getMetric() throws SigarException {        for (String ni : sigar.getNetInterfaceList()) { // System.out.println(ni); NetInterfaceStat netStat = sigar.getNetInterfaceStat(ni); NetInterfaceConfig ifConfig = sigar.getNetInterfaceConfig(ni); String hwaddr = null; if (!NetFlags.NULL_HWADDR.equals(ifConfig.getHwaddr())) {     hwaddr = ifConfig.getHwaddr(); } if (hwaddr != null) {     long rxCurrenttmp = netStat.getRxBytes();     saveChange(rxCurrentMap, rxChangeMap, hwaddr, rxCurrenttmp, ni);     long txCurrenttmp = netStat.getTxBytes();     saveChange(txCurrentMap, txChangeMap, hwaddr, txCurrenttmp, ni); }        }        long totalrxDown = getMetricData(rxChangeMap);        long totaltxUp = getMetricData(txChangeMap);        for (List<Long> l : rxChangeMap.values()) l.clear();        for (List<Long> l : txChangeMap.values()) l.clear();        return new Long[] { totalrxDown, totaltxUp };    }    private static long getMetricData(Map<String, List<Long>> rxChangeMap) {        long total = 0;        for (Entry<String, List<Long>> entry : rxChangeMap.entrySet()) { int average = 0; for (Long l : entry.getValue()) {     average += l; } total += average / entry.getValue().size();        }        return total;    }    private static void saveChange(Map<String, Long> currentMap, Map<String, List<Long>> changeMap, String hwaddr, long current, String ni) {        Long oldCurrent = currentMap.get(ni);        if (oldCurrent != null) { List<Long> list = changeMap.get(hwaddr); if (list == null) {     list = new linkedList<Long>();     changeMap.put(hwaddr, list); } list.add((current - oldCurrent));        }        currentMap.put(ni, current);    }}

CPU数据:

public class CpuData {    private static Sigar sigar;    public CpuData(Sigar s) throws SigarException {        sigar = s;        System.out.println(cpuInfo());    }    public static void main(String[] args) throws InterruptedException, SigarException {        new CpuData(new Sigar());        CpuData.startMetricTest();    }    private static void startMetricTest() throws InterruptedException, SigarException {        new Thread() { public void run() {     while(true)      BigInteger.probablePrime(MAX_PRIORITY, new Random()); };        }.start();        while(true) { String pid = ""+sigar.getPid(); System.out.print(getMetric(pid)); for(Double d:getMetric()){     System.out.print("t"+d); } System.out.println(); Thread.sleep(1000);        }}    public String cpuInfo() throws SigarException {        CpuInfo[] infos = sigar.getCpuInfoList();        CpuInfo info = infos[0];        String infoString = info.toString();        if ((info.getTotalCores() != info.getTotalSockets())     || (info.getCoresPerSocket() > info.getTotalCores())) { infoString+=" Physical CPUs: " + info.getTotalSockets(); infoString+=" Cores per CPU: " + info.getCoresPerSocket();        }        long cacheSize = info.getCacheSize();        if (cacheSize != Sigar.FIELD_NOTIMPL) { infoString+="Cache size...." + cacheSize;        }        return infoString;    }    public static Double[] getMetric() throws SigarException {        CpuPerc cpu = sigar.getCpuPerc();        double system = cpu.getSys();        double user = cpu.getUser();        double idle = cpu.getIdle();//      System.out.println("idle: " +CpuPerc.format(idle) +", system: "+CpuPerc.format(system)+ ", user: "+CpuPerc.format(user));        return new Double[] {system, user, idle};    }    public static double getMetric(String pid) throws SigarException {        ProcCpu cpu = sigar.getProcCpu(pid);//      System.out.println(sigar.getProcFd(pid));//      System.err.println(cpu.toString());        return cpu.getPercent();    }}

RAM数据:

public class RamData {    private static Sigar sigar;    private static Map<String, Long> pageFoults;    public RamData(Sigar s) throws SigarException {        sigar = s;        System.out.println(getMetric().toString());    }    public static void main(String[] args) throws SigarException, InterruptedException {        new RamData(new Sigar());        RamData.startMetricTest();    }    public static void startMetricTest() throws SigarException, InterruptedException {        while (true) { Map<String, String> map = RamData.getMetric("" + sigar.getPid()); System.out.println("Resident: tt"         + Sigar.formatSize(Long.valueOf(map.get("Resident")))); System.out.println("PageFaults: tt" + map.get("PageFaults")); System.out.println("PageFaultsTotal:t" + map.get("PageFaultsTotal")); System.out.println("Size:    tt"         + Sigar.formatSize(Long.valueOf(map.get("Size")))); Map<String, String> map2 = getMetric(); for (Entry<String, String> e : map2.entrySet()) {     String s;     try {         s = Sigar.formatSize(Long.valueOf(e.getValue()));     } catch (NumberFormatException ex) {         s = ((int) (double) Double.valueOf(e.getValue())) + "%";     }     System.out.print("  " + e.getKey() + ": " + s); } System.out.println("n------------------"); Thread.sleep(1000);        }    }    public static Map<String, String> getMetric() throws SigarException {        Mem mem = sigar.getMem();        return (Map<String, String>) mem.toMap();    }    public static Map<String, String> getMetric(String pid) throws SigarException {        if (pageFoults == null) pageFoults = new HashMap<String, Long>();        ProcMem state = sigar.getProcMem(pid);        Map<String, String> map = new TreeMap<String, String>(state.toMap());        if (!pageFoults.containsKey(pid)) pageFoults.put(pid, state.getPageFaults());        map.put("PageFaults", ""     + (state.getPageFaults() - pageFoults.get(pid)));        map.put("PageFaultsTotal", ""+state.getPageFaults());        return map;    }}

过程数据:

public class ProcessData {    private static Sigar sigar;    public ProcessData(Sigar s) throws SigarException {        this.sigar = s;        System.out.println(getMetric().toString());        System.out.println(getMetric(getPidString()).toString());    }    public static void main(String[] args) throws SigarException {        new ProcessData(new Sigar());        System.out.println(ProcessData.getMetric());        System.out.println(ProcessData.getMetric(getPidString()));    }    public static Map<String, String> getMetric() throws SigarException {        ProcStat state = sigar.getProcStat();        return (Map<String, String>) state.toMap();    }    public static Map<String, String> getMetric(String pid) throws SigarException {        ProcState state = sigar.getProcState(pid);        return (Map<String, String>) state.toMap();    }    public static long getPid() {        return sigar.getPid();    }    public static String getPidString() {        return ""+sigar.getPid();    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5100599.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存