我想看看我的进程是否进行了大量上下文切换。我还想了解操作任务组如何影响上下文切换的数量。
答案1
您可以在 中查看有关进程上下文切换的信息/proc/<pid>/status
。
$ pid=307
$ grep ctxt /proc/$pid/status
voluntary_ctxt_switches: 41
nonvoluntary_ctxt_switches: 16
要查看这些数字不断更新,请运行
$ # Update twice a second.
$ watch -n.5 grep ctxt /proc/$pid/status
要仅获取数字,请运行
$ grep ctxt /proc/$pid/status | awk '{ print $2 }'
答案2
pidstat(1) - 报告 Linux 任务的统计信息。据man pidstat
它是如此简单pidstat -w …
答案3
看男人得到鲁萨奇这将让您查询自愿和非自愿上下文切换的数量。
struct rusage {
struct timeval ru_utime; /* user CPU time used */
struct timeval ru_stime; /* system CPU time used */
long ru_maxrss; /* maximum resident set size */
long ru_ixrss; /* integral shared memory size */
long ru_idrss; /* integral unshared data size */
long ru_isrss; /* integral unshared stack size */
long ru_minflt; /* page reclaims (soft page faults) */
long ru_majflt; /* page faults (hard page faults) */
long ru_nswap; /* swaps */
long ru_inblock; /* block input operations */
long ru_oublock; /* block output operations */
long ru_msgsnd; /* IPC messages sent */
long ru_msgrcv; /* IPC messages received */
long ru_nsignals; /* signals received */
long ru_nvcsw; /* voluntary context switches */
long ru_nivcsw; /* involuntary context switches */
};
您可以告诉它报告每个线程的信息,如下所示:
struct rusage usage;
getrusage( RUSAGE_THREAD, &usage );
只需在关键部分之前和之后调用它两次,然后查看 use.ru_nivcsw 值是否增加。
答案4
您可以使用,sar -w
例如,sar -w 1 3
报告每秒上下文切换的总次数,每 1 秒报告一次,共报告 3 次。