使用 ps 命令
ps 命令是一个灵活的工具,用于标识在系统上运行的程序及其正在使用的资源。 它显示关于系统中进程的统计信息和状态信息,如进程或线程标识、I/O 活动、CPU 或内存利用情况。
本节中,我们将讨论与 CPU 相关的选项和输出字段。
ps 命令的三个可能输出列以各不相同的方式报告 CPU 使用情况。
- 列
- 值为:
- C
- 进程近来使用的 CPU 时间(以时钟滴答为单位)。
- 时间
- 从进程启动以来使用 CPU 的总时间(以分钟和秒为单位)。
- CPU 百分比
- 从进程启动以来使用 CPU 的总时间除以线程启动后所经历的时间。 此时间是度量程序对 CPU 依赖程度的一种方法。
CPU 密集
# ps -ef | egrep -v "STIME|$LOGNAME" | sort +3 -r | head -n 15 UID PID PPID C STIME TTY TIME CMD
mary 45742 54702 120 15:19:05 pts/29 0:02 ./looper
root 52122 1 11 15:32:33 pts/31 58:39 xhogger
root 4250 1 3 15:32:33 pts/31 26:03 xmconsole allcon
root 38812 4250 1 15:32:34 pts/31 8:58 xmconstats 0 3 30
root 27036 6864 1 15:18:35 - 0:00 rlogind
root 47418 25926 0 17:04:26 - 0:00 coelogin <d29dbms:0>
bick 37652 43538 0 16:58:40 pts/4 0:00 /bin/ksh
bick 43538 1 0 16:58:38 - 0:07 aixterm
luc 60062 27036 0 15:18:35 pts/18 0:00 -ksh列 (C) 指示最近使用的 CPU。 循环程序的进程在列表中领先。 该C值可以使循环进程的 CPU 使用率最小化,因为调度程序在 120 时停止计数。 对于多线程的进程,此字段指出对该进程中的所有线程列示的 CP 总和。
ps -lmo THREAD -p 8060956
USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND
root 8060956 6815882 - A 720 120 0 - 200001 pts/0 - ./a.out
- - - 8716483 R 120 120 0 - 400000 - - -
- - - 17105017 R 120 120 0 - 400000 - - -
- - - 24182849 R 120 120 0 - 400000 - - -
- - - 24510589 R 120 120 0 - 400000 - - -
- - - 30277829 R 120 120 0 - 400000 - - -
- - - 35913767 R 120 120 0 - 400000 - - -在
CP 列中,值 720 指出此值下列示的各个线程的总和,即:(5 * 120) + (120)。CPU 时间比值
定期运行的 ps 命令将显示 CPU 时间TIME列和 CPU 时间与实时的比率%CPU列。 查找支配 CPU 使用的进程。 au 和 v 选项提供了有关用户进程的类似信息。 aux 和 vg 选项显示用户和系统进程。
# ps au
USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND
root 19048 24.6 0.0 28 44 pts/1 A 13:53:00 2:16 /tmp/cpubound
root 19388 0.0 0.0 372 460 pts/1 A Feb 20 0:02 -ksh
root 15348 0.0 0.0 372 460 pts/4 A Feb 20 0:01 -ksh
root 20418 0.0 0.0 368 452 pts/3 A Feb 20 0:01 -ksh
root 16178 0.0 0.0 292 364 0 A Feb 19 0:00 /usr/sbin/getty
root 16780 0.0 0.0 364 392 pts/2 A Feb 19 0:00 -ksh
root 18516 0.0 0.0 360 412 pts/0 A Feb 20 0:00 -ksh
root 15746 0.0 0.0 212 268 pts/1 A 13:55:18 0:00 ps au(process CPU time / process duration) * 100设想有两个进程:一个启动并运行五秒钟,但并不结束;然后另一个启动并运行五秒钟,但并不结束。 ps 命令现在将显示 50%%CPU用于第一个进程 (5 秒 CPU 表示 10 秒耗用时间) , 100% 用于第二个进程 (5 秒 CPU 表示 5 秒耗用时间)。
在一个 SMP 上,这个值要除以系统中可用的 CPU 个数。 回顾上一个例子,这就是为什么%CPUcpubound 进程的值从不超过 25 ,因为该示例在四路处理器系统上运行。 cpubound 进程使用 100% 的一个处理器,但%CPU值除以可用 CPU 数。
THREAD 选项
# ps -mo THREAD
USER PID PPID TID ST CP PRI SC WCHAN F TT BND COMMAND
root 20918 20660 - A 0 60 1 - 240001 pts/1 - -ksh
- - - 20005 S 0 60 1 - 400 - - -该TID列显示线程标识,BND列显示与处理器绑定的进程和线程。
正常情况下,会看到一个名为kproc(操作系统版本 4 中的 PID 为 516) 使用 CPU 时间。 当没有线程可以在某个时间片中运行时,调度程序将该时间片的 CPU 时间分配给这个内核进程 (kproc),称为空闲或等待 kproc。 SMP 系统对每个处理器都有一个空闲 kproc。