我在 T3 架构中遇到问题,其中 db 进程没有充分利用 cpu 的线程功能。我想了解 11g 和 10g 如何利用线程以及是否可以验证来自系统的这些查询。
如何判断一个 solaris 进程是否是并行化的并且是否正在利用 cpu 中的线程?
我在 T3 架构中遇到问题,其中 db 进程没有充分利用 cpu 的线程功能。我想了解 11g 和 10g 如何利用线程以及是否可以验证来自系统的这些查询。
如何判断一个 solaris 进程是否是并行化的并且是否正在利用 cpu 中的线程?
只需运行 prstat 并查看最后一列,标记为PROCESS/NLWP
。
NLWP
表示轻量级进程的数量,这正是该进程当前在 Solaris 中使用的线程数,因为在 lwp 和用户线程之间存在一对一的映射。
单线程进程将显示1
在那里,而多线程进程将显示更大的数字。
例如:
PID 用户名大小 RSS 状态 PRI NICE TIME CPU 进程/ NLWP ... 12905 根 4472K 3640K cpu0 59 0 0:00:01 0.4% prstat/ 1 18403 监视器 474M 245M 运行 59 17 1:01:28 9.1% java/ 103 4102 oracle 12G 12G 运行 59 0 0:00:12 4.5% oracle/ 1
这里 prstat 和 oracle 是单线程的,而 java 是多线程的(总是如此)
您可以使用 -L 和 -p 选项深入了解多线程进程的各个线程活动,例如prstat -L -p pid
这将为按 CPU 活动排序的每个线程显示一行。PROCESS/LWPID
在这种情况下,最后一列将被标记LWPID
为线程 ID。如果多个线程显示出重要的活动,您的进程将积极利用多线程。