2013-09-01 21 views
2

我在T3架構中遇到了db進程沒有完全利用cpu的線程能力的問題。我想了解11g和10g如何利用線程,以及我是否可以驗證系統中的這些查詢。如何查看solaris中的進程線程?

如何判斷solaris進程是否已並行化並利用cpu內的線程?

回答

6

只需運行prstat並看看最後一列,標記爲PROCESS/NLWP

NLWP表示輕量級進程的數量,該數量正好是Solaris當前正在使用的線程數,因爲lwp和用戶線程之間存在一對一的映射關係。

單線程進程將顯示1,而多線程進程將顯示更大的數字。

如:

 
    PID USERNAME SIZE RSS STATE PRI NICE  TIME CPU PROCESS/NLWP  
... 
12905 root  4472K 3640K cpu0 59 0 0:00:01 0.4% prstat/1 
18403 monitor 474M 245M run  59 17 1:01:28 9.1% java/103 
4102 oracle  12G 12G run  59 0 0:00:12 4.5% oracle/1 

這裏了prstat和Oracle是單線程的,而Java是多線程(總是)

您可以通過向下鑽取多線程程序的各個線程活動使用-L和-p選項,如prstat -L -p pid

這將顯示每個按CPU活動排序的線程的一行。在那種情況下,最後一列將被標記爲PROCESS/LWPID,LWPID是線程ID。如果多個線程顯示重要的活動,那麼您的進程將主動利用多線程。