java - How to get CPU, RAM and Network-Usage of a Java7 App -
i found older article how-to-monitor-the-computers-cpu-memory-and-disk-usage-in-java , wated ask, if there new in java 7. want current cpu-, ram- , netzwork-usage of app periodically. has work linux (mac) , windows. data must not extremely detailed, 3 values enough (cpu: 10%, ram 4%, network 40%). cool if data app , not whole os-system, work, too.
thank's help
answering own question ;p code have written...
networkdata:
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; /** * @throws interruptedexception * @throws sigarexception * */ 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 { (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); (list<long> l : rxchangemap.values()) l.clear(); (list<long> l : txchangemap.values()) l.clear(); return new long[] { totalrxdown, totaltxup }; } private static long getmetricdata(map<string, list<long>> rxchangemap) { long total = 0; (entry<string, list<long>> entry : rxchangemap.entryset()) { int average = 0; (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-data:
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-data:
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: \t\t" + sigar.formatsize(long.valueof(map.get("resident")))); system.out.println("pagefaults: \t\t" + map.get("pagefaults")); system.out.println("pagefaultstotal:\t" + map.get("pagefaultstotal")); system.out.println("size: \t\t" + sigar.formatsize(long.valueof(map.get("size")))); map<string, string> map2 = getmetric(); (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; } }
proces-data:
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(); } }
Comments
Post a Comment