solaris迅速查找手冊(cè)

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