網絡依然還是計算機,Sun還是Sun!

Solaris中的酷命令-ZT

上一篇 / 下一篇  2008-01-30 10:15:19 / 个人分类:Solaris學習

查看( 304 ) / 评论( 4 )
Sun eCommunity 作者  Peter Baer Galvin   Solaris 中的命令非常之多,以致很难从中分离出那些很酷的命令。例如,有些命令报告程序进行每个系统调用时所要花费的时间,有些命令动态地显示系统活动信息,而且这些命令大部分都同时包含在了 Solaris 8 和 Solaris 9 中。这里,我将重点介绍其中一些命令,您或许会发现它们特别有用。
JU&A&@j:Za pqy0     系统管理员是工具的使用者。通过实践经验,我们掌握了更多工具,并且增强了诊断问题以及实施解决方案的能力。本次专栏中包含的命令是通过经验、朋友、熟人以及出席 9 月举行的 SunNetwork 2002 大会收集到的。Solaris 内核的开发人员 Brian Cantrill 和 Mike Shapiro 所讲的"The /procodile Hunter"让人很有启发并令人感到惊恐,因为 Cantrill 编写代码来说明一个观点的速度比 Shapiro 能够讲解该观点的速度还要快!
%F6U M"}w(R1iK0
c:}xh ~c Z9sw${0 有用的 Solaris 命令
F"Zp7t4YU0
uR5t#C/Bs0 truss -c (Solaris >= 8):这是个令人震惊的 truss 选项,它提供了被追踪命令的全面概要信息:IXPUB技术博客e8A4C'L4[VAE

E xcr4}d4bQx5y0 IXPUB技术博客}7Vl"jNpJ
$ truss -c grep asdf work.doc
zpm&WE#Qhis0 syscall               seconds   calls  errorsIXPUB技术博客@'Y{$@N S o4G
_exit                   .00       1
By9JUUcE\o0 read                    .01      24
o Qu)|(c t0 open                   .00       8      4IXPUB技术博客},]:_)zY$Yr
close                   .00       5
+[4M#m a-h gM7Sh\0 brk                     .00      15
4x!sTn7S:`$w+t,KtM4J*{0 stat                     .00       1IXPUB技术博客3xN7aj n$L
fstat                    .00       4
s|u+E1x,oJl0 execve                  .00       1IXPUB技术博客q)|kX^/? L#iKW
mmap                   .00      10
6|3Nz.A:gF0 munmap                 .01       3
|t6C qG0 memcntl                 .00       2IXPUB技术博客J.{ E'_/{;R
llseek                   .00       1IXPUB技术博客.m)D1c2We6yc
open64                  .00       1
/i nft5D7w`0                          ----     ---    ---
;l(Bi2us-hhu+M6CC0 sys totals:               .02      76      4IXPUB技术博客WE U n/T%H$e
usr time:                .00
wC6_4j+lV#P0 elapsed:                 .05
-_I!wmb0
k(mN5S_$@ yuTI0 IXPUB技术博客 i]8fiI1S'DW'Gp!Y+P
它还能显示正在运行的进程的概要数据。在本例中,数据表明了从启动 truss 命令到用 control-c 来终止 truss 执行的期间,进程到底做了些什么。这对于判断进程为何被挂起是很理想的,因为您无须费力浏览整个 truss 的输出。 IXPUB技术博客5b }4H9v5vR qhm

1ba'rS,S:J ar0 truss -d 和 truss -D (Solaris >= 8):这两个选项表明与truss显示的每个系统调用相关的时间信息。这对于找出定制代码或商业代码中的问题很有帮助。例如:
3a.Iz6a K0
Q yR8V#DK#m3fAf0l0
kH8}/I)B p0 $ truss -d whoIXPUB技术博客6E ?x \~"k
Base time stamp:  1035385727.3460  [ Wed Oct 23 11:08:47 EDT 2002 ]IXPUB技术博客gb;}:v8d!m!m
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64)  argc = 1IXPUB技术博客:]'P*J5`SV
0.0032 stat("/usr/bin/who", 0xFFBEFA98)                = 0
aq#t7_9e`i }k0 0.0037 open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENTIXPUB技术博客KY0p P3c I
0.0042 open("/usr/local/lib/libc.so.1", O_RDONLY)      Err#2 ENOENTIXPUB技术博客-j\u^3a$u7Y%^;_i
0.0047 open("/usr/lib/libc.so.1", O_RDONLY)            = 3
1urp)@7YQ0 0.0051 fstat(3, 0xFFBEF42C)                            = 0
-Btyn0Pv:`0 . . .IXPUB技术博客] Veho h
truss -D 对于显示系统调用间的延迟时间更加有用:IXPUB技术博客 S z.W-bUw

3^%W _iP!_-YP0 IXPUB技术博客 j5uu}c
Dilbert> truss -D whoIXPUB技术博客g~5Ve6CR!ab;a o
0.0000 execve("/usr/bin/who", 0xFFBEFD5C, 0xFFBEFD64)  argc = 1IXPUB技术博客 Az?$B1Gd U[{
0.0028 stat("/usr/bin/who", 0xFFBEFA98)                = 0IXPUB技术博客 p(]7} u6F0ZM0Y(q Z
0.0005 open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENTIXPUB技术博客)h&u @T q9u @
0.0006 open("/usr/local/lib/libc.so.1", O_RDONLY)      Err#2 ENOENTIXPUB技术博客k0?~H G.S;f
0.0005 open("/usr/lib/libc.so.1", O_RDONLY)            = 3IXPUB技术博客/?6TN [ _"Q,r
0.0004 fstat(3, 0xFFBEF42C)                            = 0
Qk#|`8M5Ag%G0 IXPUB技术博客Cw,m xo6m-C:Y

)D v$m8cc&c"h.A1?0 这个例子中,stat 这个系统调用要比其他系统调用占用更长的时间。 IXPUB技术博客&U|2pQQ]DqQ'R

a%krO/_7Q3Zs.h'j{0 truss -T:这是个很棒的调式帮助选项。在执行指定的系统调用时,它可以终止进程("-U"也执行同样的操作,不过是在进行用户级的函数调用时)。此时,将会获取用于进一步分析的 core 文件,或者使用一些 /proc 工具来确定进程各个方面的状态。 IXPUB技术博客x/m;{Y ckZ0n
IXPUB技术博客s:vtYj1B
truss -l(在 Solaris 9 中已改进):显示多线程进程中每个调用的线程号。Solaris 9 中的 truss -l 经过了改进,最后还可以监视多线程的应用程序的执行。 IXPUB技术博客@AH,F bjY ^

!d;["IrP8p!b0 Truss 的确是个功能强大的工具。例如,可在 core 文件中用于分析问题产生的原因。还可以通过"-u"选项来显示用户级的库(既可以为系统库,也可为程序员库)调用的详细信息。 IXPUB技术博客/x:Ai ry$B

vss*~e0 pkg-ge:这是个用于自动获取免费软件包的好工具(http://www.bolthole.com/solaris)。它通过 /etc/pkg-get.conf 来配置。一旦配置好并运行后,就运行 pkg-get -a 来获取可用包的列表以及运行 pkg-get -I 来获取并安装给定的包。 IXPUB技术博客grs4|?r3e!O
IXPUB技术博客 Hf,hc l r
Plimit (Solaris >= 8):这个命令用于显示并设置正在运行的进程中的每个进程的限制。如果一个长时间运行的进程超过了某个限制(如打开的文件数目),使用该命令就十分方便。因为无须使用 limit 命令后重新运行该进程,plimit 就可以修改正在运行的进程。
D4a6u7W D"D+Yhy0 IXPUB技术博客fZ+qlK1@)pb
coreadm (Solaris >= 8):在以前没有 coreadm 命令时,core dumps 被置于进程的工作目录下。并且 core 文件将会互相覆盖。而这个问题和其他更多问题都可以由 coreadm 来处理,它是一个管理 core 文件生成的工具。您可以通过该工具指定是否保存 core、core存储的位置和应保留的版本数目,等等。所有这些设置信息都是在重启前通过 coreadm 修改 /etc/coreadm.conf 来保存的。 IXPUB技术博客c/gyrW` ADG'sd c
IXPUB技术博客#_,f I2I:A(u4[e3}'y
pgrep (Solaris >= 8):pgrep 在 /proc 中搜索符合给定规则的进程,并返回进程的 ID。其中一个很棒的选项是"-n",它返回的是最新的满足条件的进程号。
)gS1i\`&C"A0 IXPUB技术博客pX0z[x;^J(iu8OQH
preap (Solaris >= 9):除去僵尸进程。任何困于"z"状态(由 ps 命令显示)的进程,该命令都可将之从系统中清除。
COzaf0
2H+Y9ge)S[n/d0 pargs (Solaris >= 9):显示进程的参数及环境变量。
AC,MB3|KE'oc,L0 IXPUB技术博客 \jnz1S6S8Q+E
nohup -p (Solaris >= 9):nohup 命令可以用于启动一个进程,因此即使用于启动进程的 shell 被关闭(即进程获得"SIGHUP"信号),该进程仍然可以继续运行。这对于让一个后台任务不管碰到何种情况仍然可以继续运行是很有用的。但是如果您已经启动了一个进程,但稍后希望使它免受 HUP 信号的影响,该怎么办呢?在Solaris 9中, nohup -p 可以获取进程 ID 并使之忽略 SIGHUP 信号。
+Eed%cE4O5Li8C0 IXPUB技术博客*R Y7`"ls
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(有些地方考虑到它是个被支持的程序而使用它)。
P9a(J\(z P@0 IXPUB技术博客z0Y/U+?,M7m \
trapstat (Solaris >= 9):trapstat 以及 lockstat 和 kstat 是 Solaris 中最难以理解的命令。它们显示一个运行的操作系统内部中最具体的细节信息。每个命令对于解决 Solaris 系统中发生的古怪问题都是必不可少的。最好是将它们的输出随错误报告一起提交,但进一步的研究揭示,它们也能为一般应用提供有用信息。
[ZxF Q [oN0
_@'tm6q8G7L0 vmstat -p (Solaris >= 8):在这个选项可以使用之前,要确定是哪种类型的内存命令导致系统页面调度几乎是不可能的(请查阅"se toolkit")。vmstat -p 可以解决此问题,因为它不但显示您的系统是否处于内存紧缺的情况(通过"sr"栏),而且还显示是否是由以下内容导致的:应用程序的代码,应用程序的数据或 I/O 。"-p"能够真正帮助找出 Solaris 中导致神秘的内存问题的原因。 IXPUB技术博客ER5f9G&Jj4Ka

#s0~{N0zS4Yi:G0 pmap -x (Solaris >= 8,Solaris >= 9中进行了错误修复):如果已经得知进程中有内存问题,并且需要获得更多内存使用的详细信息,就可以使用 pmap -x。该命令将解释指定 ID 的目标进程的整个内存映射信息,如下: IXPUB技术博客NY,KU)eT!f

&TKFc3f&{*beVi0
.CM4XW tR0 # pmap -x 1779
4QozV;|0 1779:   -kshIXPUB技术博客Q"x Dmj+F;x S
Address  Kbytes     RSS    Anon  Locked Mode   Mapped File
Zl?WX2z-NA0 00010000     192     192       -       - r-x--  ksh
'|'yW$| J-{0 00040000       8       8       8       - rwx--  kshIXPUB技术博客6e!S;N b)c.@
00042000      32      32       8       - rwx--    [ heap ]IXPUB技术博客(j#Z(p _L$z'`6l
FF180000     680     664       -       - r-x--  libc.so.1IXPUB技术博客"RN(p-E/I
FF23A000      24      24       -       - rwx--  libc.so.1IXPUB技术博客p0EGg/[c``p
FF240000       8       8       -       - rwx--  libc.so.1IXPUB技术博客 N#@3N \U8R
FF280000     568     472       -       - r-x--  libnsl.so.1
QAH)Y$K!sY&e0 FF31E000      32      32       -       - rwx--  libnsl.so.1
(K g { N#| f GG;J^-j)G0 FF326000      32      24       -       - rwx--  libnsl.so.1IXPUB技术博客'S&B'n!n\o(ny
FF340000      16      16       -       - r-x--  libc_psr.so.1
D%RR)?(vG.N0 FF350000      16      16       -       - r-x--  libmp.so.2IXPUB技术博客 `lIp4xU
FF364000       8       8       -       - rwx--  libmp.so.2IXPUB技术博客1Z?}X;C E
FF380000      40      40       -       - r-x--  libsocket.so.1IXPUB技术博客:j m&A*Hp'Po.o4w
FF39A000       8       8       -       - rwx--  libsocket.so.1
o3F8tJ+d(I.M}aL0 FF3A0000       8       8       -       - r-x--  libdl.so.1
v9Cj)EOw0 FF3B0000       8       8       8       - rwx--    [ anon ]
-N5}c[oy2Z6kV0 FF3C0000     152     152       -       - r-x--  ld.so.1IXPUB技术博客$B/Fh2D G3O
FF3F6000       8       8       8       - rwx--  ld.so.1
)Y.^m"K$B \'a)?/Q,q0 FFBFE000       8       8       8       - rw---    [ stack ]
fYW3Pq [ k"N#p a0 -------- ------- ------- ------- -------
4~ cu8M7}AwHb0 total Kb    1848    1728      40       -
,]%k^ }Yp&lm5K-X0 IXPUB技术博客nj]fR

9ur4tM;F!@-L0 这里,我们可以看到每一块内存,它们被用于做什么,占用了多大的(虚拟的和真实的)空间以及其模式信息。
8Vk6XE MWl q"q0
PYN{"_+f2tA1qb0 df -h (Solaris >= 9):这个命令在 Linux 上已经应用十分普遍,刚刚转移到了 Solaris 平台。df -h 以一种方便阅读的形式显示文件系统的概要信息: IXPUB技术博客m6bQb Wh;tR g7d

$Jv4j7RS:|MJh8t0
\(g&E zt`0 $ df -h
3LB\l/aN7Wm0 Filesystem             size   used  avail capacity  Mounted onIXPUB技术博客IVnrrDK(aR
/dev/dsk/c0t0d0s0      4.8G   1.7G   3.0G    37%    /
0d'z+k:b y6gs0 /proc                    0K     0K     0K     0%    /proc
+T$wI B5q%E5z9Qt0 mnttab                   0K     0K     0K     0%    /etc/mnttabIXPUB技术博客-ZQ,xNq;G
fd                       0K     0K     0K     0%    /dev/fdIXPUB技术博客o? |%~Ak
swap                   848M    40K   848M     1%    /var/run
'F z e/_VY3V*e_;o\0 swap                   849M   1.0M   848M     1%    /tmp
8Hg#u ? ])^1t0 /dev/dsk/c0t0d0s7       13G    78K    13G     1%    /export/home
I$d*MO8^l:YL7@@0
A$JPB\ z*?7~0 IXPUB技术博客ZkLY&oVU#V
结束语 IXPUB技术博客)a2b6o8p,mj'p_lB3S
IXPUB技术博客f2Cu0EQ#qI
    每个管理员都有一套日常使用的工具,以及另外一套在紧急情况下帮助解决问题的工具。本文介绍了各种各样的的命令及选项,它们不广为人知但却十分有用。您是否也保存了这样一些偏爱的工具呢?如果有,请也发送给我,让我可以扩展自己的工具集。另外,可以发送一些您不喜欢或是感觉有危险的工具,它们或许也可以变成有用的呢!IXPUB技术博客/VXW)N,h1bWg\
IXPUB技术博客R+Yj fa Y/M(q2S
    Peter Baer Galvin(http://www.petergalvin.org)是 Corporate Technologies 公司(http://www.cptech.com)的首席技术专家,还是一位重要的系统集成商和增值销售商。之前,Peter 曾是 Brown 大学计算机科学系的系统管理员。他为 Byte 和其他杂志撰写文章,也曾为 Pete's Wicked World的安全问题专栏和 Pete's Super Systems 的 Unix Insider(http://www.unixinsider.com)系统管理专栏撰写文章。Peter 还是 Operating Systems Concepts 和 Applied Operating Systems Concepts 这两本教科书的合著者。作为一名顾问和教员,Peter 教授课程并在全球范围的安全与系统管理问题上发表演讲。

TAG:

云杉实验室——蝴蝶分院 云杉上的蝴蝶 发布于2008-02-22 23:36:22
此贴已收入主题列表
philipsyq发布于2008-03-26 20:41:57
谢谢,顶一下!!!
SUN microsystems chnvip001 发布于2008-04-21 17:02:31
俺这就去试试看,呵呵。
herosong发布于2008-06-08 08:02:58
收藏鸟$S{ @&Hq

1R xl+i3? M5c谢谢
我来说两句

(可选)

Open Toolbar