solaris迅速查找手冊

系統(tǒng)管理員是工具的使用者。通過實踐經(jīng)驗,我們掌握了更多工具,并且增強了診斷問題以及實施解決方案的能力。本次專欄中包含的命令是通過經(jīng)驗、朋友、熟人以及出席 9 月舉行的 SunNetwork 2002 大會收集到的。Solaris 內(nèi)核的開發(fā)人員 Brian Cantrill 和 Mike Shapiro 所講的"The /procodile Hunter"讓人很有啟發(fā)并令人感到驚恐,因為 Cantrill 編寫代碼來說明一個觀點的速度比 Shapiro 能夠講解該觀點的速度還要快!
有用的 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
它還能顯示正在運行的進程的概要數(shù)據(jù)。在本例中,數(shù)據(jù)表明了從啟動 truss 命令到用 control-c 來終止 truss 執(zhí)行的期間,進程到底做了些什么。這對于判斷進程為何被掛起是很理想的,因為您無須費力瀏覽整個 truss 的輸出。
truss -d 和 truss -D (Solaris >= 8):這兩個選項表明與truss顯示的每個系統(tǒng)調(diào)用相關的時間信息。這對于找出定制代碼或商業(yè)代碼中的問題很有幫助。例如:
$ 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.0037 open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
0.0042 open("/usr/local/lib/libc.so.1", O_RDONLY) Err#2 ENOENT
0.0047 open("/usr/lib/libc.so.1", O_RDONLY) = 3
0.0051 fstat(3, 0xFFBEF42C) = 0
. . .
truss -D 對于顯示系統(tǒng)調(diào)用間的延遲時間更加有用:
Dilbert> truss -D who
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64) argc = 1
0.0028 stat("/usr/bin/who", 0xFFBEFA98) = 0
0.0005 open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
0.0006 open("/usr/local/lib/libc.so.1", O_RDONLY) Err#2 ENOENT
0.0005 open("/usr/lib/libc.so.1", O_RDONLY) = 3
0.0004 fstat(3, 0xFFBEF42C) = 0
這個例子中,stat 這個系統(tǒng)調(diào)用要比其他系統(tǒng)調(diào)用占用更長的時間。
truss -T:這是個很棒的調(diào)式幫助選項。在執(zhí)行指定的系統(tǒng)調(diào)用時,它可以終止進程("-U"也執(zhí)行同樣的操作,不過是在進行用戶級的函數(shù)調(diào)用時)。此時,將會獲取用于進一步分析的 core 文件,或者使用一些 /proc 工具來確定進程各個方面的狀態(tài)。
truss -l(在 Solaris 9 中已改進):顯示多線程進程中每個調(diào)用的線程號。Solaris 9 中的 truss -l 經(jīng)過了改進,最后還可以監(jiān)視多線程的應用程序的執(zhí)行。
Truss 的確是個功能強大的工具。例如,可在 core 文件中用于分析問題產(chǎn)生的原因。還可以通過"-u"選項來顯示用戶級的庫(既可以為系統(tǒng)庫,也可為程序員庫)調(diào)用的詳細信息。
pkg-ge:這是個用于自動獲取免費軟件包的好工具(http://www.bolthole.com/solaris)。它通過 /etc/pkg-get.conf 來配置。一旦配置好并運行后,就運行 pkg-get -a 來獲取可用包的列表以及運行 pkg-get -I 來獲取并安裝給定的包。
Plimit (Solaris >= 8):這個命令用于顯示并設置正在運行的進程中的每個進程的限制。如果一個長時間運行的進程超過了某個限制(如打開的文件數(shù)目),使用該命令就十分方便。因為無須使用 limit 命令后重新運行該進程,plimit 就可以修改正在運行的進程。
coreadm (Solaris >= 8):在以前沒有 coreadm 命令時,core dumps 被置于進程的工作目錄下。并且 core 文件將會互相覆蓋。而這個問題和其他更多問題都可以由 coreadm 來處理,它是一個管理 core 文件生成的工具。您可以通過該工具指定是否保存 core、core存儲的位置和應保留的版本數(shù)目,等等。所有這些設置信息都是在重啟前通過 coreadm 修改 /etc/coreadm.conf 來保存的。
pgrep (Solaris >= 8):pgrep 在 /proc 中搜索符合給定規(guī)則的進程,并返回進程的 ID。其中一個很棒的選項是"-n",它返回的是最新的滿足條件的進程號。
preap (Solaris >= 9):除去僵尸進程。任何困于"z"狀態(tài)(由 ps 命令顯示)的進程,該命令都可將之從系統(tǒng)中清除。
pargs (Solaris >= 9):顯示進程的參數(shù)及環(huán)境變量。
nohup -p (Solaris >= 9):nohup 命令可以用于啟動一個進程,因此即使用于啟動進程的 shell 被關閉(即進程獲得"SIGHUP"信號),該進程仍然可以繼續(xù)運行。這對于讓一個后臺任務不管碰到何種情況仍然可以繼續(xù)運行是很有用的。但是如果您已經(jīng)啟動了一個進程,但稍后希望使它免受 HUP 信號的影響,該怎么辦呢?在Solaris 9中, nohup -p 可以獲取進程 ID 并使之忽略 SIGHUP 信號。
prstat (Solaris >= 8):prstat 也是 top 命令,但擁有更多功能。這兩個命令都可以提供一個屏幕的關于進程的有用信息以及其他的相關信息,并且能頻繁地更新,總之是個很棒的顯示系統(tǒng)性能的窗口。但 prstat 要比 top 更加精確。它還提供了一些很好的選項。"-a"可以同時顯示進程與用戶的信息(默認由 CPU hog 排序)。"-c"使其執(zhí)行很像 vmstat(在前一個報告下面接著顯示新的報告)。"-C"顯示在處理器集中的進程。"-j"顯示一個"工程"中的進程。"-L"顯示每個線程和每個進程的信息。"-m"和"-v"顯示每個進程的很多詳細的性能信息(包括 pages、traps、lock wait 和 CPU wait)。所有輸出數(shù)據(jù)都可以按照在內(nèi)存中設置的大小、虛擬內(nèi)存大小、運行時間等等條件來排列。prstat 在沒有 top 的系統(tǒng)中是個十分有用的工具,并且由于它的精確性,所以很可能取代 top(有些地方考慮到它是個被支持的程序而使用它)。
trapstat (Solaris >= 9):trapstat 以及 lockstat 和 kstat 是 Solaris 中最難以理解的命令。它們顯示一個運行的操作系統(tǒng)內(nèi)部中最具體的細節(jié)信息。每個命令對于解決 Solaris 系統(tǒng)中發(fā)生的古怪問題都是必不可少的。最好是將它們的輸出隨錯誤報告一起提交,但進一步的研究揭示,它們也能為一般應用提供有用信息。
vmstat -p (Solaris >= 8):在這個選項可以使用之前,要確定是哪種類型的內(nèi)存命令導致系統(tǒng)頁面調(diào)度幾乎是不可能的(請查閱"se toolkit")。vmstat -p 可以解決此問題,因為它不但顯示您的系統(tǒng)是否處于內(nèi)存緊缺的情況(通過"sr"欄),而且還顯示是否是由以下內(nèi)容導致的:應用程序的代碼,應用程序的數(shù)據(jù)或 I/O 。"-p"能夠真正幫助找出 Solaris 中導致神秘的內(nèi)存問題的原因。
pmap -x (Solaris >= 8,Solaris >= 9中進行了錯誤修復):如果已經(jīng)得知進程中有內(nèi)存問題,并且需要獲得更多內(nèi)存使用的詳細信息,就可以使用 pmap -x。該命令將解釋指定 ID 的目標進程的整個內(nèi)存映射信息,如下:
# 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 ]
FF180000 680 664 - - r-x-- libc.so.1
FF23A000 24 24 - - rwx-- libc.so.1
FF240000 8 8 - - rwx-- libc.so.1
FF280000 568 472 - - r-x-- libnsl.so.1
FF31E000 32 32 - - rwx-- libnsl.so.1
FF326000 32 24 - - rwx-- libnsl.so.1
FF340000 16 16 - - r-x-- libc_psr.so.1
FF350000 16 16 - - r-x-- libmp.so.2
FF364000 8 8 - - rwx-- libmp.so.2
FF380000 40 40 - - r-x-- libsocket.so.1
FF39A000 8 8 - - rwx-- libsocket.so.1
FF3A0000 8 8 - - r-x-- libdl.so.1
FF3B0000 8 8 8 - rwx-- [ anon ]
FF3C0000 152 152 - - r-x-- ld.so.1
FF3F6000 8 8 8 - rwx-- ld.so.1
FFBFE000 8 8 8 - rw--- [ stack ]
-------- ------- ------- ------- -------
total Kb 1848 1728 40 -
這里,我們可以看到每一塊內(nèi)存,它們被用于做什么,占用了多大的(虛擬的和真實的)空間以及其模式信息。
df -h (Solaris >= 9):這個命令在 Linux 上已經(jīng)應用十分普遍,剛剛轉(zhuǎn)移到了 Solaris 平臺。df -h 以一種方便閱讀的形式顯示文件系統(tǒng)的概要信息:
$ df -h
Filesystem size used a vail 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
結(jié)束語
每個管理員都有一套日常使用的工具,以及另外一套在緊急情況下幫助解決問題的工具。本文介紹了各種各樣的的命令及選項,它們不廣為人知但卻十分有用。您是否也保存了這樣一些偏愛的工具呢?如果有,請也發(fā)送給我,讓我可以擴展自己的工具集。另外,可以發(fā)送一些您不喜歡或是感覺有危險的工具,它們或許也可以變成有用的呢!
相關文章
- Solaris是Sun公司開發(fā)和發(fā)布的一種現(xiàn)代操作系統(tǒng),是UNIX系統(tǒng)的一個重要分支,今天小編為大家?guī)淼氖荢olaris線程模型詳解,希望對大家會有幫助,有需要的朋友一起去看看吧2017-04-06
- 今天小編為大家?guī)淼氖荢olaris iostat詳解,希望對大家會有幫助 ,有需要的朋友一起去看看吧2017-04-06
- 今天小編為大家?guī)淼氖菧\談Solaris技術(shù),希望對大家會有幫助,有需要的朋友一起去看看吧2017-04-06
solaris11如何擴展資源池?solaris11擴展資源池的方法
最近一些朋友問小編solaris11如何擴展資源池?今天小編將為大家分享solaris11擴展資源池的方法!希望對大家會有幫助,有需要的朋友一起去看看吧2017-04-06Solaris10如何更改子網(wǎng)掩碼?Solaris10更改子網(wǎng)掩碼的方法
最近一些朋友在問Solaris10如何更改子網(wǎng)掩碼?下面小編將為大家分享Solaris10更改子網(wǎng)掩碼的方法!希望對大家會有幫助!有需要的朋友一起去看看吧2017-03-19- 今天小編將要為大家?guī)淼氖荢olaris中對tar.z進行安裝卸載詳解!希望對大家會有幫助!有需要的朋友一起去看看吧2017-03-16
如何在solaris中設置分辨率?在solaris中設置分辨率的方法
最近有些朋友問小編如何在solaris中設置分辨率?下面小編將為大家?guī)淼氖窃趕olaris中設置分辨率的方法!希望對大家會有幫助,感興趣的朋友一起去看看吧2017-03-15如何查看solaris系統(tǒng)的版本和位數(shù)?
最近一些朋友問小編如何查看solaris系統(tǒng)的版本和位數(shù)?今天小編將為大家分享查看solaris系統(tǒng)的版本和位數(shù)的方法!希望對大家會有幫助,有需要的朋友一起去看看吧2017-03-14整理Solaris系統(tǒng)與Linux系統(tǒng)常用命令的區(qū)別
這篇文章主要介紹了Solaris系統(tǒng)與Linux系統(tǒng)常用命令的區(qū)別,Linux作為Unix的仿制品,其命令會與作為Unix發(fā)行版的Solaris有諸多相同點,而本文則關注它們的相異之處,需要的朋友2016-02-05windows XP+Fedora 8+solaris 11三系統(tǒng)安裝攻略
介紹windows XP+Fedora 8+solaris 11三系統(tǒng)安裝攻略2014-06-16