免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1341 | 回复: 0
打印 上一主题 下一主题

who -r [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-31 10:46 |只看该作者 |倒序浏览
核心提示#调整第二块硬盘(c0t1d0)的文件分区表调整为和引导盘一致 prtvtoc /dev/rdsk/c1t0d0s2|fmthard –s – /dev/rdsk/c1t1d0s2 #先生成replicas,供DiskSuite内部用 metadb -afc 3 c1t0d0s6 c1t1d0s6 #Creating a mirror metainit -f d10 1 1 c1t0d0s0 metainit d20 1 1 c1t.....
  
#调整第二块硬盘(c0t1d0)的文件分区表调整为和引导盘一致
prtvtoc /dev/rdsk/c1t0d0s2|fmthard –s – /dev/rdsk/c1t1d0s2
#先生成replicas,供DiskSuite内部用
metadb -afc 3 c1t0d0s6 c1t1d0s6
#Creating a mirror
metainit -f d10 1 1 c1t0d0s0
metainit d20 1 1 c1t1d0s0
metainit d0 -m d10
metaroot d0
metainit -f d11 1 1 c1t0d0s1
metainit d12 1 1 c1t1d0s1
metainit d1 -m d11
metainit -f d31 1 1 c1t0d0s3
metainit d32 1 1 c1t1d0s3
metainit d3 -m d31
metainit -f d41 1 1 c1t0d0s4
metainit d42 1 1 c1t1d0s4
metainit d4 -m d41
metainit -f d51 1 1 c1t0d0s5
metainit d52 1 1 c1t1d0s5
metainit d5 -m d51
metainit -f d71 1 1 c1t0d0s7
metainit d72 1 1 c1t1d0s7
metainit d7 -m d71
#编辑/etc/vfstab文件
/dev/md/dsk/d1  -       -       swap    -       no      -
/dev/md/dsk/d0  /dev/md/rdsk/d0 /       ufs     1       no      -
/dev/md/dsk/d5  /dev/md/rdsk/d5 /usr    ufs     1       no      -
/dev/md/dsk/d3  /dev/md/rdsk/d3 /backup ufs     2       yes     -
/dev/md/dsk/d7  /dev/md/rdsk/d7 /export/home    ufs     2       yes     -
/dev/md/dsk/d4  /dev/md/rdsk/d4 /opt    ufs     2       yes     -
swap    -       /tmp    tmpfs   -       yes     -
#文件系统激活
lockfs -fa
reboot
#文件系统关联
metattach d0 d02
metattach d1 d12
metattach d3 d32
metattach d4 d42
metattach d5 d52
metattach d7 d72
----------
metadb -d c1t0d0s6 删除数据库
metadb -fd c1t1d0s6
metaclear -f d62  清除镜像
metastat 状态检查
----------------------------------------------------------
/dev/dsk/c1t0d0s0      9.8G   3.6G   6.1G    37%    /
/dev/dsk/c1t0d0s5      4.9G   1.6G   3.3G    34%    /usr
/proc                    0K     0K     0K     0%    /proc
mnttab                   0K     0K     0K     0%    /etc/mnttab
fd                       0K     0K     0K     0%    /dev/fd
swap                    10G    32K    10G     1%    /var/run
swap                    10G    15M    10G     1%    /tmp
/dev/dsk/c1t0d0s4       31G   2.2G    29G     8%    /opt
/dev/dsk/c1t0d0s3       10G   4.8M    10G     1%    /backup
/dev/dsk/c1t0d0s7      6.9G   7.2M   6.8G     1%    /export/home
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.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 对于显示系统调用间的延迟时间更加有用:
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 这个系统调用要比其他系统调用占用更长的时间。
truss -T:这是个很棒的调式帮助选项。在执行指定的系统调用时,它可以终止进程("-U"也执行同样的操作,不过是在进行用户级的函数调用时)。此时,将会获取用于进一步分析的 core 文件,或者使用一些 /proc 工具来确定进程各个方面的状态。
truss -l(在 Solaris 9 中已改进):显示多线程进程中每个调用的线程号。Solaris 9 中的 truss -l 经过了改进,最后还可以监视多线程的应用程序的执行。
Truss 的确是个功能强大的工具。例如,可在 core 文件中用于分析问题产生的原因。还可以通过"-u"选项来显示用户级的库(既可以为系统库,也可为程序员库)调用的详细信息。
pkg-ge:这是个用于自动获取免费软件包的好工具(
http://www.bolthole.com/solaris
)。它通过 /etc/pkg-get.conf 来配置。一旦配置好并运行后,就运行 pkg-get -a 来获取可用包的列表以及运行 pkg-get -I 来获取并安装给定的包。
Plimit (Solaris >= 8):这个命令用于显示并设置正在运行的进程中的每个进程的限制。如果一个长时间运行的进程超过了某个限制(如打开的文件数目),使用该命令就十分方便。因为无须使用 limit 命令后重新运行该进程,plimit 就可以修改正在运行的进程。
coreadm (Solaris >= 8):在以前没有 coreadm 命令时,core dumps 被置于进程的工作目录下。并且 core 文件将会互相覆盖。而这个问题和其他更多问题都可以由 coreadm 来处理,它是一个管理 core 文件生成的工具。您可以通过该工具指定是否保存 core、core存储的位置和应保留的版本数目,等等。所有这些设置信息都是在重启前通过 coreadm 修改 /etc/coreadm.conf 来保存的。
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 ]
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 -
这里,我们可以看到每一块内存,它们被用于做什么,占用了多大的(虚拟的和真实的)空间以及其模式信息。
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
truss 命令执行指定命令或附加在列出进程标识上,并产生对系统调用、接收的信号和进程造成的机器故障的跟踪。每行跟踪输出报告 Fault 或 Signal 名称或 Syscall 名称和参数及返回值。系统库定义的子例程对于内核的严格系统调用并不是必要的。truss 命令不报告这些子例程,而是报告子例程的基本系统调用。 可能的话,系统调用参数使用有关系统头文档定义符号显示。对于路径名指针参数,truss 显示指向的字符串。未定义的系统调用缺省显示系统名称、任何八个可能的变量及十六进制格式的返回值。
  当 -o 标志和 truss 一起使用,或标准错误改指向非终端文档时,truss 忽略挂断、中断和信号进程。他促进跟踪交互式程式从终端获得 interrupt 和 quit 信号。
  若跟踪输出保持指向终端或跟踪现存过程(使用 -p 标志),truss 对 hangup、interrupt 和 quit 信号做出反应,释放任何跟踪进程并退出。他使用户可终止过多的跟踪输出并释放前现存进程。释放进程继续到功能恢复正常。
  对和含有一列变量的选项,名称 all 可用作指定列表中任何可能成员的简写。以 ! 开头的列表,选项含义是相反的(示例:排除而非跟踪)。同一选项可能指定为多种表现形式。同一列表的相同名称,后面的选项(右边选项)覆盖前面的选项(左边选项)。
  除了页面故障以外的任何机器故障均导致公开信号到发生故障进程。除了进程阻塞信号,每一机器故障报告后立即给出接收的信号报告。
  为避免和其他控制进程冲突,truss 不跟踪由其检测到并由带有 /proc 接口的另一进程控制的进程。
  多进程跟踪输出不是按严格的时间顺序产生。示例:管道读取能够在相应的写之前报告。然而每一进程输出是严格按时间排序。跟踪输出含有制表符,且每八个位置配置标准制表符停止位。
  系统跟踪子进程时可运行于每个用户进程槽之外。这是因为跟踪多个进程时,truss 作为所跟踪进程的控制进程运行,将用于所给进程的进程槽数目加倍。运行多进程跟踪之前应考虑通常系统强制的每个用户 25 进程的限制。
  处理多个进程时,truss 使用共享内存和信号。例如:在多进程标识下使用 -f 标志和 -p 标志。需要的话,跟踪可运行于非配置系统中。这些情况下,truss 生成警告消息并继续跟踪。然而跟踪输出可能断章取义,-c 标志输出仅报告顶级命令或第一个进程标识,不计数子进程。
  操作系统为进程跟踪强加某种安全性限制。必须有跟踪命令的存取特权。 set-uid 和 set-gid 进程仅可由特权用户跟踪。除由特权用户运行外,truss 命令无法控制执行 set-id 或不可读对象代码的进程。这些未跟踪的进程从执行点保持正常并和 truss 无关。
  truss 输出提到的轻量级进程(LWP)是真正的内核线程。选项 -l 在每行跟踪输出显示 LWP 标识(即线程标识)。
  AIX 库的用户库函数有静态和动态两种装入函数调用。选项 -u 跟踪仅用于动态装入函数调用。
  -u 选项提供动态装入函数调用的用户级函数调用跟踪。此选项产生函数调用的进入/退出跟踪。
  标志
  -a 显示在每一执行系统调用中传递的参数字符串。
  -c 计数跟踪系统调用、故障和信号而不是逐行显示跟踪结果。跟踪命令终止或 truss 中断时生成摘要报告。若还使用 -f 标志,计数包含任何跟踪的系统调用、故障和子进程信号。
  -d 每行输出包含时间戳记。时间从跟踪开始以每秒显示。跟踪输出的第一行显示测量单个时间戳记的基本时间。缺省不显示时间戳记。
  -D 每行输出显示增量时间。增量时间表示从由该线程引起的最后报告事件起计时引起事件的 LWP 的逝去时间。缺省不显示增量时间。
  -e 显示在每一执行系统调用中传递的环境字符串。
  -f 跟在 fork 系统调用产生的任何子进程之后,并包含跟踪输出中的信号、故障和系统调用。 通常,仅跟踪第一级命令和进程。假如指定 -f 标志,进程标识和每行跟踪输出一起显示哪个进程执行系统调用或接收信号。
  -i 阻止显示可中断的休眠系统调用。某些终端设备或管道的系统调用,如 open 和 kread,可无限期休眠且是可中断的。通常,假如这种休眠系统调用保持超过一秒休眠,truss 将报告。系统调用完成后一秒内报告系统调用。-i 标志使这种系统调用完成后仅报告一次。
  -l 显示有关 LWP 进程的标识(线程标识)及 truss 输出。输出中缺省不显示 LWP 标识。
  -m [!]Fault 跟踪进程中的机器故障。必须用逗号分隔要跟踪的机器故障。可按名称或代码指定故障(参见 sys/procfs.h 头文档)。假如列表以符号“!”开始,指定的故障不再被跟踪且不显示跟踪输出。缺省值是 -mall -m!fltpage。
  -o Outfile 指定用于跟踪输出的文档。缺省时输出指向标准错误。
  -p 将参数作为一列现存进程的进程标识而不是要执行的命令解释到 truss。 倘若进程用户标识或组标识和用户的用户标识或组标识匹配或用户是特权用户,truss 控制并开始跟踪每个进程。
  -r [!] FileDescriptor 显示每一个读取指定文档描述符的 I/O 缓冲区全内容。输出采用每行 32 字节的格式并以 ASCII 字符(跟在空格后)形式显示字节,或以控制字符的双字符 C 语言转义序列形式显示字节,如水平制表符 (\t) 或换行符 (\n)。假如不能解释成 ASCII 格式,字节以双字符十六进制形式显示。即使没有 -r 标志,仍显示跟踪读取 I/O 缓冲区的前 16 位字节。缺省值是 -r!all。
  -s [!] Signal 允许列出要跟踪或除去的 Signals。跟踪列表中指定的信号(由逗号分隔)。信号被忽略但不是被进程阻塞时,跟踪输出仍报告每个指定信号的接收。直到进程释放时才可接收阻塞信号。可按名称或代码指定信号(参见 sys/signal.h)。假如该列表以“!”符号开头,则列出的信号将从显示跟踪输出中排除。缺省值是 -s all。
  -t [!] Syscall 包含或排除来自跟踪进程的系统调用。要跟踪的系统调用必须在列表中指定并以逗号分隔。假如列表以符号“!”开始,指定的系统调用将被从跟踪输出中排除。缺省值是 -tall。
  -u [!] [LibraryName [...]::[!]FunctionName [...] ]
  跟踪来自用户库动态装入的用户级函数调用。 LibraryName 是逗号分隔的库名列表。FunctionName 是逗号分隔的函数名列表。两种情况下的名称都包含名称匹配元字符 *、? 和 [],这些字符和由 shell 解释的意义相同,但适用于库/函数名称空间而非文档。
  任一列表中以 ! 开头的列指定不跟踪库或函数的排除名称列表。除去库将除去该库中所用函数。忽略库除去列表后的任何函数列表。可指定多个 -u 选项并将他们从左到右排列。缺省不跟踪库/函数调用。
  -w [!] FileDescriptor 显示列出文档描述符每个写过程的 I/O 缓冲区内容(参见 -r)。缺省值是 -w!all。
  -x [!] Syscall 以原始格式显示跟踪系统调用指定参数的数据,通常按十六进制而不是符号化方式。缺省值是 -x!all.
  示例
  1. 在终端上跟踪 find 命令,输入:
  truss find . -print >find.out
  2. 跟踪 lseek、close、statx 和开放系统调用,输入:
  truss -t lseek,close,statx,open find . -print > find.out
  3. 显示 find 命令的线程标识和常规输出,输入:
  truss -l find . -print >find.out
  4. 显示 find 命令的时间戳记和常规输出,输入:
  truss -d find . -print >find.out
  5. 显示 find 命令的增量时间和常规输出,输入:
  truss -D find . -print >find.out
  6. 运行 ls 命令时,在 libc.a 库中跟踪 malloc() 函数调用及除去 strlen() 函数调用,输入:
  truss -u libc.a::malloc,!strlen ls
  7. 运行 ls 命令时,跟踪 libc.a 库中名称以“m”开头的任何函数调用,输入:
  truss -u libc.a::m*,!strlen ls
  8. 运行可执行 foo 时,跟踪来自 libcurses.a 库的任何函数调用及除去来自 libc.a 的调用,输入:
  truss -u libcurses.a,!libc.a::* foo
  9. 运行可执行 foo 时,跟踪来自 libcurses.a 的 refresh() 函数调用和来自 libc.a 的 malloc() 函数调用,输入:
  truss -u libc.a::malloc -u libcurses.a::refresh foo


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/60639/showart_474123.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP