1

オンラインのCPUの数を確認するにはどうすればよいですか?現在の周波数を読み取るハンドラーが1000ミリ秒ごとに実行されており、オンラインになっているコアの数も確認したいと思います。

ディレクトリ「/sys/ devices / system /cpu/」を調べてきました。常に1である「/sys/ devices / system / cpu / cpu1 / online」を監視しましたが、これも常に1である/ cpu0/onlineを監視しました。

この情報はカーネル/デバイス固有ですか?すべてのデバイスで機能する方法でオンラインになっているコアの数を確認するにはどうすればよいですか?

編集:Runtime.availableProcessors()はうまく機能しているようですが、コアがオン/オフであるかどうかを通知するシステムファイルがあるかどうかを知りたいのですが。

4

2 に答える 2

1

試したデバイスでavailableProcessors()を使用して成功しました。関数の詳細については、公式のJavadocを参照してください。別の可能な解決策は、このフォーラム投稿で説明されています。

于 2013-03-06T21:05:05.790 に答える
-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;
}
于 2013-03-06T21:18:53.063 に答える