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
댓글
댓글 쓰기