T3 アーキテクチャ内で、db プロセスが CPU のスレッド機能を十分に活用していないという問題が発生しています。11g と 10g がスレッド化をどのように利用しているか、またシステムからこれらのクエリを検証できるかどうかを知りたいです。
solaris プロセスが並列化されていて、CPU 内でスレッド化を利用しているかどうかを確認するにはどうすればよいですか?
T3 アーキテクチャ内で、db プロセスが CPU のスレッド機能を十分に活用していないという問題が発生しています。11g と 10g がスレッド化をどのように利用しているか、またシステムからこれらのクエリを検証できるかどうかを知りたいです。
solaris プロセスが並列化されていて、CPU 内でスレッド化を利用しているかどうかを確認するにはどうすればよいですか?
prstat を実行して、ラベルが付けられた最後の列を見てくださいPROCESS/NLWP
。
NLWP
lwp とユーザー スレッドの間には 1 対 1 のマッピングがあるため、Solaris でプロセスが現在使用しているスレッドの正確な数である軽量プロセスの数を意味します。
シングルスレッドプロセスは1
そこに表示されますが、マルチスレッドプロセスはより大きな数を示します。
例えば:
PID ユーザー名 サイズ RSS 状態 プライス タイム 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 オラクル 12G 12G 実行 59 0 0:00:12 4.5% オラクル/ 1
ここで、prstat と oracle はシングルスレッドですが、Java はマルチスレッドです (常にそうです)。
-L オプションと -p オプションを使用して、マルチスレッド プロセスの個々のスレッド アクティビティを掘り下げることができます。prstat -L -p pid
これにより、CPU アクティビティでソートされた各スレッドの行が表示されます。その場合、最後の列には、スレッド ID であるPROCESS/LWPID
というラベルが付けられます。LWPID
複数のスレッドが重要なアクティビティを示している場合、プロセスは積極的にマルチスレッドを利用しています。