public CpuResource getResource(long updatePeriod) { try { RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r"); String load = reader.readLine(); String[] toks = load.split("[ ]+"); float userMode1 = Float.parseFloat(toks[1]); float niceMode1 = Float.parseFloat(toks[2]); float systemMode1 = Float.parseFloat(toks[3]); float idleMode1 = Float.parseFloat(toks[4]); try { Thread.sleep(updatePeriod); } catch (Exception e) {} reader.seek(0); load = reader.readLine(); reader.close(); toks = load.split("[ ]+"); float userMode2 = Float.parseFloat(toks[1]); float niceMode2 = Float.parseFloat(toks[2]); float systemMode2 = Float.parseFloat(toks[3]); float idleMode2 = Float.parseFloat(toks[4]); float userMode = userMode2 - userMode1; float niceMode = niceMode2 - niceMode1; float systemMode = systemMode2 - systemMode1; float idleMode = idleMode2 - idleMode1; float total = userMode + niceMode + systemMode + idleMode; float user = (userMode / total) * 100; float system = (systemMode / total) * 100; } catch (IOException e) { Log.e(LOG_NAME, e.getMessage()); } catch (Exception e) { Log.e(LOG_NAME, e.getMessage()); } return user+system; }
/proc/stat 파일을 읽어서 첫줄을 파싱처리를 해서 보여준다.
user사용량 = (user / total) * 100
system사용량 = (system / total) * 100
단 해당 수치는 시스템 부팅 후 누적 값 이므로 순간 사용량을 구하기 위해서는 두번 값을 읽어와서 늘어난 만큼의 수치값으로 계산을 해야 한다.
참조 사이트:
http://stackoverflow.com/questions/9756353/how-to-get-memory-usage-and-cpu-usage-by-application
http://www.dreamy.pe.kr/zbxe/CodeClip/163339
http://forum.falinux.com/zbxe/?document_srl=554222&mid=lecture_tip&page=7
https://kldp.org/node/129143
댓글
댓글 쓰기