アプリケーション内の特定のスレッド、プロセス、または一部のコードに対してCPU使用率を取得できるかどうかは知りませんか? AUGraphを見ると、平均CPU使用量を返す関数があります。彼らはどのようにそれをするのですか?スレッドのiOSとMac CPUの使用
答えて
これはiOSにも当てはまるとは確信していませんが、OS XではMach/BSDサブシステムにアクセスすることで必要な情報を得ることができます。基本的には、特定のプロセスのスレッド一覧を取得し、すべてのスレッドの使用量を合計してプロセスCPU使用量を取得します。スレッドCPU使用量だけが必要な場合は、要約する必要はありません。
1が望むかもしれないほど簡単で単純ではないが、ここでは(このコードは、「マックOS Xの内部」アミット・シンに基づいています):
pid_t pid = ...; //-- this is the process id you need info for
task_t port;
task_for_pid(mach_task_self(), pid, &port);
task_info_data_t tinfo;
mach_msg_type_number_t task_info_count;
task_info_count = TASK_INFO_MAX;
kr = task_info(port, TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count);
if (kr != KERN_SUCCESS) {
continue; //-- skip this task
}
task_basic_info_t basic_info;
thread_array_t thread_list;
mach_msg_type_number_t thread_count;
thread_info_data_t thinfo;
mach_msg_type_number_t thread_info_count;
thread_basic_info_t basic_info_th;
uint32_t stat_thread = 0; // Mach threads
basic_info = (task_basic_info_t)tinfo;
// get threads in the task
kr = task_threads(port, &thread_list, &thread_count);
if (kr != KERN_SUCCESS) {
<HANDLE ERROR>
continue;
}
if (thread_count > 0)
stat_thread += thread_count;
long tot_sec = 0;
long tot_usec = 0;
long tot_cpu = 0;
int j;
for (j = 0; j < thread_count; j++) {
thread_info_count = THREAD_INFO_MAX;
kr = thread_info(thread_list[j], THREAD_BASIC_INFO,
(thread_info_t)thinfo, &thread_info_count);
if (kr != KERN_SUCCESS) {
<HANDLE ERROR>
continue;
}
basic_info_th = (thread_basic_info_t)thinfo;
if (!(basic_info_th->flags & TH_FLAGS_IDLE)) {
tot_sec = tot_sec + basic_info_th->user_time.seconds + basic_info_th->system_time.seconds;
tot_usec = tot_usec + basic_info_th->system_time.microseconds + basic_info_th->system_time.microseconds;
tot_cpu = tot_cpu + basic_info_th->cpu_usage;
}
} // for each thread
私にはわからない場合がありますおそらくそれを行うより良い方法ですが、これは私のために働いています。
EDIT:謝罪 - あなたの質問を間違えた。これは、アプリケーション内の特定のスレッド/プロセスの使用状況を表示するのではなく、AUGraphの機能を実行します。
#include <stdlib.h>
double loadavg[3];
getloadavg(loadavg, 3);
NSLog(@"Average over last minute: %f", loadavg[0]);
NSLog(@"Average over last 5 minutes: %f", loadavg[1]);
NSLog(@"Average over last 10 minutes: %f", loadavg[2]);
サンプル出力:
だけgetloadavg()
使うので
... getloadavg[62486:207] Average over last minute: 0.377441
... getloadavg[62486:207] Average over last 5 minutes: 0.450195
... getloadavg[62486:207] Average over last 10 minutes: 0.415527
を、これらの報告された値を百分率です。そのように表示するには:アップルのmanページhereから
... getloadavg[62531:207] Average over last minute: 23.93%
... getloadavg[62531:207] Average over last 5 minutes: 33.01%
... getloadavg[62531:207] Average over last 10 minutes: 36.72%
より:このから
#include <stdlib.h>
double loadavg[3];
getloadavg(loadavg, 3);
NSLog(@"Average over last minute: %02.2f%%", loadavg[0] * 100);
NSLog(@"Average over last 5 minutes: %02.2f%%", loadavg[1] * 100);
NSLog(@"Average over last 10 minutes: %02.2f%%", loadavg[2] * 100);
サンプル出力を。
これはprevの回答よりも簡単ですが、スレッドだけでなくプロセス全体の負荷を返します。編集:申し訳ありません。私はちょうどあなたの編集に気づいた。 – thealch3m1st
loadavg [2]は平均15分です – iwill
"getloadavg()関数は、システム内のプロセス数を返す 実行キューの平均時間はさまざまです。どのようにCPU使用量を与えるのですか? –
- 1. CPUの使用率とスレッド
- 2. cpuのコアとスレッド
- 3. スレッドとCPUのアフィニティー
- 4. CPUコアとスレッド
- 5. アプリケーションの発熱とMacでのCPU使用率の増加
- 6. Androidのプロセスのスレッドによるリソース(CPUとメモリ)の使用
- 7. Windows Mobileデバイス上のスレッドごとのCPU使用率をモニタ
- 8. JavaシングルスレッドCPU使用とマルチスレッドCPU使用
- 9. NodeJSがCPU作業用のIOスレッドを使用する
- 10. UITextField/UITextView - iOS 11 - 高いCPU使用率
- 11. スレッドとCPU間のJavaの関係
- 12. 複数のCPUとスレッドのシングルスレッドプロセス
- 13. MacのCPUアフィニティー10.6+とXcode 4+
- 14. LinuxでのスレッドのCPU使用率を調べる
- 15. C++古いPCでのスレッドCPU使用率の問題
- 16. Macアプリケーションは167%以上のCPUを使用します
- 17. Python/PySerialとCPUの使用
- 18. CPUとメモリの使用スクリプト
- 19. DelphiでスレッドのCPU使用率を追跡する方法
- 20. CPU使用率のスレッドを継続的に監視する
- 21. Elasticsearch:Lucene MergeスレッドのCPU使用率が高い
- 22. C#スレッドのCPU使用量を制限する
- 23. ブーストでのCPUアフィニティ::スレッドAPI
- 24. Mac用iOSファイルシステムへのアクセス
- 25. Pythonスクリプト用のRAMとCPUの使用
- 26. C#スレッド化パークドCPU?
- 27. リミットジョブのCPU使用量SLURM
- 28. JavaScriptがサファリ(MacとiOSの)
- 29. CPU使用率スパイク
- 30. Javaスレッド - CPU使用率は高いですか?
想像以上に少し複雑ですが、プロセッサ使用量だけでなくスレッド使用量を得る唯一の方法のように思えます。ありがとう:) – thealch3m1st
これは非常に冗長ですが、たとえば、1つのスレッドのデータが必要な場合は、次を参照してください。http://stackoverflow.com/questions/13893134/get-current-pthread-cpu-usage-mac- os-x – Aktau