运行环境:
CentOS Linux release 7.5.1804 (Core)
Linux centosgpt 5.2.0-rc4 #1 SMP Sun Jun 16 13:25:49 CST 2019 x86_64 x86_64 x86_64 GNU/Linux
进程的运行时间:
-
通过ps 查看
[root@centosgpt ~]# ps -o etime= -p "$$"
55:12
其中"$$"可以替换成具体的进程id, etime后的等号
man ps
-o format
...
If all column headers are empty (ps -o pid= -o comm=) then the header line will not be output.
...
上下文切换次数:
-
通过proc文件
/proc/{pid}/status
[root@centosgpt ~]# grep ctxt /proc/1177/status
voluntary_ctxt_switches: 248
nonvoluntary_ctxt_switches: 2
volutary_ctxt_switches : 表示主动调度;
发生场景 等待IO或资源 调用__schedule,主动让出cpu
nonvolutary_ctxt_switches : 表示抢占式调度,;
发生场景:1时间片用完了, 需要切换到其他进程; 2 发生在高优先级进程被唤醒。
-
通过sysstat
前提:安装sysstat:
方法:yum install sysstat (ubuntu 使用apt-get install sysstat)
1. 可以查看所有进程的上下文切换情况((kernels 2.6.23 and later only)
[root@centosgpt ~]# pidstat -w 1
Linux 5.2.0-rc4 (centosgpt) 07/20/2019 _x86_64_ (2 CPU)
07:55:59 PM UID PID cswch/s nvcswch/s Command
07:56:00 PM 0 9 1.94 0.00 ksoftirqd/0
07:56:00 PM 0 10 25.24 0.00 rcu_sched
07:56:00 PM 0 431 4.85 0.00 irq/16-vmwgfx
07:56:00 PM 0 944 10.68 0.00 vmtoolsd
07:56:00 PM 0 945 0.97 0.00 irqbalance
07:56:00 PM 0 38762 9.71 0.00 kworker/1:2-events_power_efficient
07:56:00 PM 0 38775 15.53 0.00 kworker/0:0-mm_percpu_wq
07:56:00 PM 0 38853 420.39 0.00 tar
07:56:00 PM 0 38854 0.97 15.53 gzip
07:56:00 PM 0 38858 0.97 1.94 pidstat
2. 也可以查看指定进程下所有线程的上下文切换情况
[root@centosgpt ~]# pidstat -w -I -t -p 1177 3
Linux 5.2.0-rc4 (centosgpt) 07/20/2019 _x86_64_ (2 CPU)
08:02:06 PM UID TGID TID cswch/s nvcswch/s Command
08:02:09 PM 0 1177 - 0.00 0.00 rsyslogd
08:02:09 PM 0 - 1177 0.00 0.00 |__rsyslogd
08:02:09 PM 0 - 1195 1.00 0.00 |__in:imjournal
08:02:09 PM 0 - 1196 0.00 0.00 |__rs:main
参考:
How to check how long a process has been running?
How to see how many context switches a process makes?
进程切换:自愿(VOLUNTARY)与强制(INVOLUNTARY)
How to see the sum of all context switches of all threads within a Java process?
Be First to Comment