歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> Solaris中的酷命令

Solaris中的酷命令

日期:2017/2/28 11:21:14   编辑:關於Unix


有用的 Solaris 命令
truss -c (Solaris >= 8):這是個令人震驚的 truss 選項,它提供了被追蹤命令的全面概要信息:
$ truss -c grep asdf work.doc
syscall seconds calls errors
_exit .00 1
read .01 24
open .00 8 4
close .00 5
brk .00 15
stat .00 1
fstat .00 4
execve .00 1
mmap .00 10
munmap .01 3
memcntl .00 2
llseek .00 1
open64 .00 1
---- --- ---
sys totals: .02 76 4
usr time: .00
elapsed: .05
它還能顯示正在運行的進程的概要數據。在本例中,數據表明了從啟動 truss 命令到用 control-c 來終止 truss 執行的期間,進程到底做了些什麼。這對於判斷進程為何被掛起是很理想的,因為您無須費力浏覽整個 truss 的輸出。
truss -d 和 truss -D (Solaris >= 8):這兩個選項表明與truss顯示的每個系統調用相關的時間信息。這對於找出定制代碼或商業代碼中的問題很有幫助。例如:
$ truss -d who
Base time stamp: 1035385727.3460 [ Wed Oct 23 11:08:47 EDT 2002 ]
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64) argc = 1
0.0032 stat("/usr/bin/who", 0xFFBEFA98) = 0
0.0051 fstat(3, 0xFFBEF42C) = 0
. . .
truss -D 對於顯示系統調用間的延遲時間更加有用:
Dilbert> truss -D who
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64) argc = 1
0.0028 stat("/usr/bin/who", 0xFFBEFA98) = 0
0.0004 fstat(3, 0xFFBEF42C) = 0
這個例子中,stat 這個系統調用要比其他系統調用占用更長的時間。
truss -T:這是個很棒的調式幫助選項。在執行指定的系統調用時,它可以終止進程("-U"也執行同樣的操作,不過是在進行用戶級的函數調用時)。此時,將會獲取用於進一步分析的 core 文件,或者使用一些 /proc 工具來確定進程各個方面的狀態。
truss -l(在 Solaris 9 中已改進):顯示多線程進程中每個調用的線程號。Solaris 9 中的 truss -l 經過了改進,最後還可以監視多線程的應用程序的執行。
Truss 的確是個功能強大的工具。例如,可在 core 文件中用於分析問題產生的原因。還可以通過"-u"選項來顯示用戶級的庫(既可以為系統庫,也可為程序員庫)調用的詳細信息。
Plimit (Solaris >= 8):這個命令用於顯示並設置正在運行的進程中的每個進程的限制。如果一個長時間運行的進程超過了某個限制(如打開的文件數目),使用該命令就十分方便。因為無須使用 limit 命令後重新運行該進程,plimit 就可以修改正在運行的進程。
pgrep (Solaris >= 8):pgrep 在 /proc 中搜索符合給定規則的進程,並返回進程的 ID。其中一個很棒的選項是"-n",它返回的是最新的滿足條件的進程號。
preap (Solaris >= 9):除去僵屍進程。任何困於"z"狀態(由 ps 命令顯示)的進程,該命令都可將之從系統中清除。
pargs (Solaris >= 9):顯示進程的參數及環境變量。
nohup -p (Solaris >= 9):nohup 命令可以用於啟動一個進程,因此即使用於啟動進程的 shell 被關閉(即進程獲得"SIGHUP"信號),該進程仍然可以繼續運行。這對於讓一個後台任務不管碰到何種情況仍然可以繼續運行是很有用的。但是如果您已經啟動了一個進程,但稍後希望使它免受 HUP 信號的影響,該怎麼辦呢?在Solaris 9中, nohup -p 可以獲取進程 ID 並使之忽略 SIGHUP 信號。
prstat (Solaris >= 8):prstat 也是 top 命令,但擁有更多功能。這兩個命令都可以提供一個屏幕的關於進程的有用信息以及其他的相關信息,並且能頻繁地更新,總之是個很棒的顯示系統性能的窗口。但 prstat 要比 top 更加精確。它還提供了一些很好的選項。"-a"可以同時顯示進程與用戶的信息(默認由 CPU hog 排序)。"-c"使其執行很像 vmstat(在前一個報告下面接著顯示新的報告)。"-C"顯示在處理器集中的進程。"-j"顯示一個"工程"中的進程。"-L"顯示每個線程和每個進程的信息。"-m"和"-v"顯示每個進程的很多詳細的性能信息(包括 pages、traps、lock wait 和 CPU wait)。所有輸出數據都可以按照在內存中設置的大小、虛擬內存大小、運行時間等等條件來排列。prstat 在沒有 top 的系統中是個十分有用的工具,並且由於它的精確性,所以很可能取代 top(有些地方考慮到它是個被支持的程序而使用它)。
trapstat (Solaris >= 9):trapstat 以及 lockstat 和 kstat 是 Solaris 中最難以理解的命令。它們顯示一個運行的操作系統內部中最具體的細節信息。每個命令對於解決 Solaris 系統中發生的古怪問題都是必不可少的。最好是將它們的輸出隨錯誤報告一起提交,但進一步的研究揭示,它們也能為一般應用提供有用信息。
vmstat -p (Solaris >= 8):在這個選項可以使用之前,要確定是哪種類型的內存命令導致系統頁面調度幾乎是不可能的(請查閱"se toolkit")。vmstat -p 可以解決此問題,因為它不但顯示您的系統是否處於內存緊缺的情況(通過"sr"欄),而且還顯示是否是由以下內容導致的:應用程序的代碼,應用程序的數據或 I/O 。"-p"能夠真正幫助找出 Solaris 中導致神秘的內存問題的原因。
pmap -x (Solaris >= 8,Solaris >= 9中進行了錯誤修復):如果已經得知進程中有內存問題,並且需要獲得更多內存使用的詳細信息,就可以使用 pmap -x。該命令將解釋指定 ID 的目標進程的整個內存映射信息,如下:
# pmap -x 1779
1779: -ksh
Address Kbytes RSS Anon Locked Mode Mapped File
00010000 192 192 - - r-x-- ksh
00040000 8 8 8 - rwx-- ksh
00042000 32 32 8 - rwx-- [ heap ]
FF3B0000 8 8 8 - rwx-- [ anon ]
FFBFE000 8 8 8 - rw--- [ stack ]
-------- ------- ------- ------- -------
total Kb 1848 1728 40 -
這裡,我們可以看到每一塊內存,它們被用於做什麼,占用了多大的(虛擬的和真實的)空間以及其模式信息。
df -h (Solaris >= 9):這個命令在 Linux 上已經應用十分普遍,剛剛轉移到了 Solaris 平台。df -h 以一種方便閱讀的形式顯示文件系統的概要信息:
$ df -h
Filesystem size used avail capacity Mounted on
/dev/dsk/c0t0d0s0 4.8G 1.7G 3.0G 37% /
/proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
fd 0K 0K 0K 0% /dev/fd
swap 848M 40K 848M 1% /var/run
swap 849M 1.0M 848M 1% /tmp
/dev/dsk/c0t0d0s7 13G 78K 13G 1% /export/home
結束語
每個管理員都有一套日常使用的工具,以及另外一套在緊急情況下幫助解決問題的工具。本文介紹了各種各樣的的命令及選項,它們不廣為人知但卻十分有用。您是否也保存了這樣一些偏愛的工具呢?如果有,請也發送給我,讓我可以擴展自己的工具集。另外,可以發送一些您不喜歡或是感覺有危險的工具,它們或許也可以變成有用的呢!
Copyright © Linux教程網 All Rights Reserved