我如何确定有多少cpu在线?我有一个处理程序,每1000毫秒读取当前频率,我还想确定有多少内核在线。
我一直在浏览目录“/ sys / devices / system / cpu /”。 我监控了“/ sys / devices / system / cpu / cpu1 / online”,它总是1, 我已经监控/ cpu0 / online,这也是1。
此信息内核/设备是否具体?如何以适用于所有设备的方式查找有多少内核?
编辑: Runtime.availableProcessors()似乎很好用,我仍然有兴趣知道是否有一个系统文件告诉你核心是否打开/关闭?
答案 0 :(得分:1)
我在试用过的设备上取得了availableProcessors()的成功。 official Java doc中提供了该功能的更详细说明。此forum post中描述了另一种可能的解决方案。
答案 1 :(得分:-1)
/**
*
* @return integer Array with 4 elements: user, system, idle and other cpu
* usage in percentage. You can handle from here what you want.
* For example if you only want active CPUs add simple if statement >0 for usage
*/
private int[] getCpuUsageStatistic() {
String tempString = executeTop();
tempString = tempString.replaceAll(",", "");
tempString = tempString.replaceAll("User", "");
tempString = tempString.replaceAll("System", "");
tempString = tempString.replaceAll("IOW", "");
tempString = tempString.replaceAll("IRQ", "");
tempString = tempString.replaceAll("%", "");
for (int i = 0; i < 10; i++) {
tempString = tempString.replaceAll(" ", " ");
}
tempString = tempString.trim();
String[] myString = tempString.split(" ");
int[] cpuUsageAsInt = new int[myString.length];
for (int i = 0; i < myString.length; i++) {
myString[i] = myString[i].trim();
cpuUsageAsInt[i] = Integer.parseInt(myString[i]);
}
return cpuUsageAsInt;
}
private String executeTop() {
java.lang.Process p = null;
BufferedReader in = null;
String returnString = null;
try {
p = Runtime.getRuntime().exec("top -n 1");
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
while (returnString == null || returnString.contentEquals("")) {
returnString = in.readLine();
}
} catch (IOException e) {
Log.e("executeTop", "error in getting first line of top");
e.printStackTrace();
} finally {
try {
in.close();
p.destroy();
} catch (IOException e) {
Log.e("executeTop",
"error in closing and destroying top process");
e.printStackTrace();
}
}
return returnString;
}