- 论坛徽章:
- 0
|
第13章 系统级故障诊断
故障诊断是研究与解决系统问题的通用术语.在通常情况下, 故障诊断主要是指改正那些导致系统崩溃或进程失败的错误。本章提供了分析和恢复常见系统故障的一般信息:
·其它故障诊断文档
·为从故障恢复中作准备
·恢复被破坏的根文件系统
·系统崩溃
一从系统告急中恢复
一电源故障后的银复
一自动重新引导
·分析系统故障
·用crash(ADM)命令检查内存转
·通常的系统范围内的问题
·cron,at和batch故障诊断
·失控的进程
13.1 其它故障诊断文档
除了系统级故障的诊断,在独立系统组件内部也可能出现各种不同情况。这类信息包含在讨论该特定组件的文档资料中。与命令有关的出错消息及问题在该命令的手册页中讨论,有关解决这些问题的信息则在该过程或子系统的指南中提供。可以使用全局摸索功能查找出错消息或条件,并且找到在文档中何处讨论它。
讨论故障诊断的主要章节包括:
·第3章“安装故障诊断”包含解决 SCO软件安装过程中出现问题的信息
·系统启动故障诊断
·网络配置故障诊断
·<SCO OpenServer系统管理指南>(本系列丛书之三)讨论与安全机制、文件系统、打
印机、UUCP及虚拟盘有关的问题
·<SCO OPenServer网络指南>(本系列丛书之四)包含诊断各种网络软件包的信息
13.2 为从救障中恢复作准备
9.5节“系统管理任务小结”叙述了许多实用方法,可以帮助你避免系统问题,最大限度减少系统故障所产生的影响。其中一些要点概述如下:
·按第5章“创建应急引导软盘组”中的方法建立应急引导盘组。如果由于系统的崩溃
而破坏了根文件系统或引导文件,使用应急引导盘组能恢复系统;否则,就必须重新
安装系统。
·按13.2.1节“记录根硬盘的布局”中的方法记录根硬盘信息,这些信息对于在根硬盘
损坏后恢复系统是十分有用的。
·经常性地监控系统性能、出错日志和系统日志。这样使你能在产生严重后果之前排除
故障。参见13.5.5节“检查系统文件中的出错历史”中有用的出错日志文件的清单。
·在系统上安装一个不间断电源( UPS),在电源波动或断电时保护系统不受损坏。
·定期进行系统备份。考虑每一周或两周做全面系统备份。因为增量备份通常比全面备
份要快,所以一般人倾向于极少进行全面备份。但是,如果你需要恢复文件,那么你
就可能需要恢复最近一次的全面备份,加上从那时起所有的增量备份,这可能是一个
冗长和乏味的过程。
·理解 ovenride终端在与安全子系统打交道时的目的。override终端用于改正阻止访问
其它终端的错误。在默认情况下,控制台多屏幕(/dev / tty01)是 override终端。如需
更多信息,请参见第10章“启动和停止系统”。
13.2.1记录根硬盘的布局
为了防止硬盘损坏必须复制根硬盘布局信息。如果有了这些信息就可以重建系统,而不必重新安装。使用divvy(ADM)来复制系统中的 UNIX分区部分,使用如下命令:
divvy -P -N
输出如下:
0 0 14999 boot EAFS
l 15000 39574 swap NON FS
2 39575 346775 root HTFS
3 346776 1022965 u HTFS
6 1022966 1022975 recover NON FS
7 0 1023983 hd0a WHOLE DISK
如果在根硬盘中有多个分区,那么用fdisk( ADM)命令将它们记录下来,包括起始和结束位置。使用下列命令:
fdisk –p
输出如下:
1 1 63999 UNIX ACTIVE
13.3 恢复被破坏的根文件系统
如果根文件系统被严重破坏,以至于在引导系统时不能执行fsck(ADM)或者系统显示毫无意义的出错消息,那么必须从备份中恢复根文件系统。要做到这一点,需要有一套应急引导软盘组,这套盘必须按照第5章“创建应急引导软盘组”所述创建。如果你没有这套软盘,那么你必须按照17.7节“替换根硬盘”中的叙述进行部分重装。
注意:应急引导软盘组必须包合一个带有已安装了正确的磁带驱动程序的核心。如果在创建应急引导软盘组之后,改变了磁带驱动器的类型,那么必须遵照14.5.2节”QIC—02”磁带驱动器引导串’’及14.5.3节“SCSI外部设备引导中’所述,在出现 Boot:提示符时配置磁带驱动器‘
按以下步骤恢复根文件系统:
(l)关闭系统。
(2)将引导软盘(或一个单一的引导/根软盘)插入软盘驱动器,然后打开系统电源。
(3)出现 Boot:提示符时,按< Enter>。
(4)如果出现提示信息,插入根软盘,并控< Enter>。
(5)系统创建一个RAM磁盘并且将一个基本根文件系统装入内存。当你看到列出已配置
到核心中的设备的启动消息之后,显示根提示符(#)。键人命令:
fsck / dev / hd0root
如果fsck执行成功,那么用haltsys(ADM)命令关闭系统,然后在出现 Boot:提示符时,按< Enter>试着再次从硬盘引导。如果检查失败,那么继续下一个步骤。
(6)键入下面的命令,从头重新配置根磁盘:
mkdev hd
注意 : 你会看到这样一些出错消息:
/ usr / lib / mkdev / hd : uniq : not found
mv: cannot access / tmp / DKINIT21 : No such file or directory ( error 2 )
这些消息是一系列来自受限制的RAM磁盘文件系统的操作,可以忽略
该命令遵照17.4节“安装硬盘’’所述,执行初始化硬盘的所有必需程序, 包括:
·用dkinit(ADM)命令设置磁盘参数(如果需要的话),如果是 SCSI盘,就跳过这一步操
作.
·用fdisk(ADM)命令对硬盘进行分区,如果具有多个分区,就应使用在13.2.1节“记录
根硬盘的布局”中复制的信息。除非根文件系统被破坏,否则不必对磁盘重新分区,
而只是简单地从fdisk命令中退出。
·用badtrk(ADM)命令映射坏块或扇区,可选择快速、扫描中恢复或不恢复几种方式,
如果选择恢复扫描磁盘,将重写磁盘中的引导扇区,详见10.6.3节“系系引导失败或显
示‘ NO OS’消息”。
·用divvy(ADM)命令重建文件系统及对换区,使用在13.2.1节“记录根硬盘的布局”
中复制的信息。如果希望改变大小,必须保证它们大于以前的系统。
如果硬盘或文件系统信息仍然有效,那么不必重建。例如,如果你的硬盘仍然有有效的hadtrk
表,那么就不必用hadtrk进行扫描。如果可能的话,可以完整地保留文件系统。
(7)你看到Making filesystems消息后不久,又回到根提示符,健人:
fsck / dev / hd0root
这条命令清理硬盘驱动器上的根文件系统。
(8)健人:
mount / dev / hd0root / mnt
这条命令安装硬盘上的根文件系统。
(9)插入根文件系统备份的第一卷并用下列命令恢复文件系统:
cd / mnt
cpio –ivmkBud –I / dev /xxx
其中xxx或rct0 ( l/4英寸盒式磁带)或为rctmini (小型盒式磁带)。
注意:如果当你试图恢复系统时遇到如下出错消息:
NOTICE: HTFS: NO space on dev ram ( 31 / 7)
Cpio: cannot write / _ BACKUP _ CONTENTS_ : …
…No space left on device (error 28)
这表示文件采用绝对路径而不是相对路径写入磁带驱动器,你试图将引导文件系统装入ramdisk 而不是装入硬盘驱动器,在cpio命令行中必须加入-A参数:
cpio –ivmkBudA –I / dev /xxx
(10)完成恢复操作之后,确保在根文件系统的顶层上有一个 stand目录。如果没有,就用下面的命令创建
mkdir satand
注意; 如果系统从SCO OpenServer Release 5以前的版本升级就不必建立引导文件系
统( /stand ), 可以跳过12 ~ 14步.
(11)用下列命令卸下并清理刚刚恢复的文件系统:
cd /
umount / dev / hd0root
fsck / dev /hd0root
你可能会看到下面的信息,可以忽略它:
umount : warning : / dev /filesystem was not in mount table
(12)检查引导文件系统/stand
fsck / dev /boot
(13)安装文件系统并改变目录:
mount /dev /boot /mnt
cd / mnt
(14)插入引导文件备份磁带,按照对根文件系统的做法进行恢复。完成恢复操作后,卸
下并检查该文件系统:
cd /
umount / mnt
fsck / dev /boot
(15)从根磁盘重新启动系统. 打开计算机电源并且正常引导.
(16)用Backup Manager 恢复所有二级文件系统. 在完成这个过程中,系统将可以恢复到原
来的状态.
13.4 系统崩溃
系统崩溃是指在没有卸下文件系统或未进行其它清理操作的情况下出现系统停机。也
称为“非正常关机”。系统崩溃有三种类型:
·告急 当系统遇到硬件问题或核心不一致,以至系统不能继续起作用,系统出
现“告急”。
·电源故障 当系统的电源失效时,即使很短时间系统也会崩溃。
·操作崩溃 如果系统由于操作员出错而“挂起”,通常需要将系统复位并且重新引导
来解决这种问题。从操作员引起的崩溃中恢复与从系统告急中恢复类似。
注意,如果一个系统中包含有从一个已关闭的系统中安装的 NFS文件,
那么此系统就好像它已被挂起;在这种情况下,重新引导那个已关闭的
系统,或者在可能情况下,从你的系统把那个文件系统卸下来,就能解决
这个问题。
当系统正常关闭时,shutdown (ADM)程序终止所有精灵进程,杀死活动进程,卸下所有
已安装上的文件系统,运行sync(ADM)命令,并且告诉init(M)使系统进入相应的状态(或单
用户状态或“安全关闭电源”)。
如果系统在这个关闭过程完成之前关闭,那么文件系统就有可能被破坏,从而导致数据
丢失。有些数据会由于高速缓存未被刷新到磁盘而丢失。操作系统会十分频繁地将缓冲区的内容刷新到磁盘中,所以因为非正常关闭而造成丢失的数据量也很少。不过,文件系统被破坏是普遍问题。如果根文件系统被破坏了,那么系统便不能正常工作。
当系统出于某种原因崩溃时,在系统日志本中记录一些数据并重新引导系统。
13.4.1 从系统告急中恢复
要从系统告急状态中恢复:
(l)从控制台屏幕上将完整的 PANIC消息和 EIP值(正在执行的指令地址)抄录到系统日
志本中。关于确定EIP数值的操作,参见13.5.3节“获取EIP值”。
(2)复位或重新开机,在Boot:提示符下按< Enter>重新引导系统。
(3)当出现系统提示时,回答 yes保存PANIC时的内存副本。
注意: 我们建议将这些信息转储到磁带中,这样你就对这次告急有一个记录,以备需要时将
它与以后再次发生PANIC是的信息进行比较. 还可以把转储的数据送到SCO支持部门,如在13.6.2节”从SCO获得更多帮助”中所讨论的那样.
下面说明了如何将数据转储到磁带上。这个例子用的是/dev/rct0,但是如果系统上有
/dev/rctmini这样的设备,使用它也能工作。
There may be a system dump memory image in the swap device.
Do you want to save it ? (y /n) y
Use Floppy Drive 0 (/ dev /rfd0 ) by default
Press ENTER to use default device.
Enter valid Floppy Drive number to use if different
Enter “t” to use tape
>t
Enter choice of tape drive:
1 - / dev / rct0
2 - / dev / rctmini
n – no , QUIT
>1
Insert tape cartridge and press return ,or enter q to quit >
Wait
Dd if = / dev / swap of = dev / rct0 / bs /=120b count =751 skip = 0
Done . Use / etc /ldsysdump to copy dump from tape of diskettes
Press return to sontinue>
我们强烈推荐你使用磁带而不是软盘来保存系统转储映像。典型的 SCO系统有很多兆
内存,所以要好几张软盘才能保存一个内存映像。如果没有足够的软盘,或者你插盘的
顺序弄错了就会出问题。可以在dumpdev设备转储出的数据上执行crash(ADM)命令,
或者重新引导系统并且将这些数据复制到磁盘上进行研究。参见“13.6节“用 CRASH
命令(ADM)检查内存转储”。
当系统告急时,系统将核心映像写到dumpdev设备上,它通常和swap设备一样。一旦
系统出现分页,数据就会马上被重写。详见(SCO OpenServer系统管理指南>(本系列丛
书之三)中“定义默认转储设备”)一节。
(4)如果你想用crash(ADM)命令研究转储映像,那么就要用ldsysdump (ADM)命令将映像复
制到磁盘。在下面的对话样本中,06May94就是将要复制的内存转储映像的文件名,不
过你可以使用任何具有某种含义的名字:
# cd / tmp
# ldsysdump 06May 94
Use Floppy Drive 0( / dev /rfd0) by default
Press ENTER to use the default
Enter valid Floppy Drive number to use if different than default
Enter “t”to use tape drive
>t
Enter choice of tape drive
1- / dev /rct0
2- /dev /rctmini
n –no,QUIT
>1
Insert tape cartridge and press return ,or enter q to quit . >
Wait.
Dd if =/dev / rct0 bs = 120b count = 751
System dump copied into image,Use crash(ADM)to analyze the dump
(5)在提示检查根文件系统时,回答”y”. 这样就能检查出, 并且在大多数情况下修复根文
件系统所遭受的破坏. 在极少数的情况下, 操作系统完全损坏了, 必须进行恢复或重
装. 详见10.1.3节”清理文件系统”.
(6)对那些系统出现告急时已安装上的文件系统,执行fsck(ADM)命令. 系统在进入多用
户时,将自动对所有标记为有问题的文件系统执行这个过程, 但是通过人工执行fsck
命令,可以控制对所发现问题的回答. 详见fsck (ADM)手册页.
(7)确证安全系统的完整性. 进一步信息参见系统管理指南>(本系列丛
书之三)中”系统文件完整性检查: 完整性(ADM)”.
13.4.2 掉电后的恢复
如果没有配置不间断电源 UPS,那么在掉电时要关闭机器. 这样在电源波动时减少对系统可能的损坏。
一旦重新通电,如10.1.3节“清理文件系统”所述, 必须清理文件系统.
13.4.3 自动重新引导
可以把 SCO OPenServer系统配置成在告急或掉电后自动重新引导,有关内容在10.5.1节“改变系统重新启动选项”中叙述。
注意: 如果把系统设置成出现告急后自动重新引导,那么就会失去可以帮助你分析故障原
因的内存转储数据
13.5 分析系统故障
除了恢复系统,分析系统故障的原因是十分重要的,这样你可以在发生另一次系统故障前排除这些故障。 SCO系统提供许多工具帮助进行这种分析。
13.5.1 自陷、故障及异常
自陷、故障和异常是 CPU在为某个用户进程(在用户态或系统态执行)、在系统态执行的系统进程(例如,sched , vhand或bdflush之类系统精灵进程)或者中断例程执行指令时检
测到的特殊条件。这些特殊条件使 CPU切换到系统态,并且执行核心的的自陷处理程序。
如果自陷发生在用户态(换句话说,如果自陷由用户进程造成),核心通常向该进程发一
个信号。例如,如果一个进程执行了一条引起被零除错误的指令, CPU就产生一个被零除异常,自陷处理程序最终要向该进程发出一个SIGFPE(浮点出错)信号(参见signal ( S)手册贝
可得到所支持的信号的完整清单)。某些用户异常是合法的,不产生信号。例如,一个进程
可能要重新引用一个有效的指针,而该指针标识的是该进程数据段中一片已调出了主存储
器的数据。CPU则产生一个页故障,自陷处理程序就将此页数据从对换区装人内存,并且重新开始执行引起出错的指令。在这种情况下,自陷处理程序就不向进程发出信号。
然而,如果一个进程引用一个无效的指针(该指针可能已被破坏或未初始化),自陷处理
程序将确定不能从文件系统或对换区中装人相应的分页,并且向该进程发出一个SIGSEGV
(段损坏)信号。
除了在少数特殊场合下,不允许核心(换句话说,在执行系统调用、系统进程和中断例程时)“自已”产生自陷、故障和异常。如果核心不产生出错消息,那么情况就很严重,系统不能继续运行。自陷处理程序调用核心内部的一个特殊panic ( )例程,此例程中止系统执行。
当系统由于寻址错误而产生告急时, CUP寄存器的当前内容将显示在控制台上,该机器存储器的内容写到dumpdev设备(通常是对换设备)中,并且系统产生一个对核心 haltsys( )
函数的内部调用.
13.5.2控制台告急信急
写到控制台上的信息通常包括CPU寄存器的当前内容,以及核心出错消息和自陷号,为分析告急情况提供了有价值的信息。同样的显示信息也可以通过在已转储的设备上执行
crash(ADM)命令的panic功能得到。注意某些系统崩溃并不产生寄存器的转储。
系统出现告急时控制台的显示和下面的内容相似。行号仅作参考,并不出现在实际的显示内容中。
1 PANIC: NEED NEW DISPLAY
2 cr0 0x FFFFFFEB cr2 0x0 0FFFFFF cr3 0x00002000 tlb 0x00500E80
3 ss 0x00000038 uesp 0xD0119554 ef1 0x00010282 ipl 0x00000000
.......
8 PANIC : Kernel mode trap . Type ox0000000E
9 Trying to dump NNNN pages
10 &..........................................................
11&.............................................................
12 NNNN pages dumped
13 * * safe to power off
14 - or -
15 * * press Any key to reboot
NNNN的值取决于系统所配置的内存总量,在屏幕上显示的每个点都对应一个64K
的内存块(或者16个4K的页)。因此,内存配置较多的系统就比内存配置较少的系统有更
多的点。
13.5.3获取EIP值
EIP(指令指针)值可以通过系统告急时显示在控制台上的 CPU寄存器的内容计算得出。EIP值是核心在出现告急时正在执行的指令的地址。
要计算EIP值,将代码段(寄存器)和指令指针(eip寄存器)的寄存器值联起来成为一对数值,该值用逗号分隔,去掉前面的零。在上面的样本中,这两个值在第4行。cs的值为0xc00000158,eip的值为0xD007448, 因此,EIP值为158: D 0070488。
可以比较几次告急的值来确定该告急是由软件还是硬件原因造成的。三次或更多次同样的EIP值通常表示一个软件上的问题;连续几次告急具有不同的EIP值,表示硬件上的问
题,如内存板损坏。这并没有固定的规则,例如,有缺陷的RAM能产生多次具有相同的EIP
值的告急。
13.5.4检查出错消息
在大多数情况下,PANIC出错消息显示在控制台上(例子中的第8行)。可以在/usr/adm/ messages文件中查找告急之前的其它消息,其中可能包含有价值的关于什么地方出错的信息。
核心出错消息报告驱动程序出错及核心其它部分出现的错误,例如,进程调度子系统和
文件子系统。经常监控这些消息是防止出现严重系统问题的一个重要步骤;在系统错误出
现之后研究这些消息是检修系统的一个重要组成部分。阅读PANIC出错消息能得到有关该系统故障原因的有价值的信息。
核心出错消息通常有以下格式:
class : [ ddname :] [ routine] message
class是以下之一:CONFIG,NOTICE,WARNING ,FATAL或PANIC。许多这样的消息都归档在messages(M)手册页中。
class类型为INIT的消息由 init(M)进程产生,并归档在 init(M)手册页中。这些消息通常在系统初始化过程中产生。有少数init消息指出了出错条件,但更多的只是通告性的消息。
ddname指出有问题的驱动程序或子系统的名字。实际的外部设备通常由一对数字表示,形式为major /minor。它标识错误发生的外部设备号。 routine选项指出检测到该条件的子系统;出错消息的这些部分主要用来帮助技术人员追踪困难的系统问题。
PANIC消息通常不记人/usr/adm/messages文件,但是告急出现之前所产生的其它消息通常都被记人日志,以提供关于该告急原因的有价值信息。PANIC消息通常显示在系统控
制台上或者可以用crash(ADM)命令的panic功能查看。
在13.5.2节“控制台告急信息”中的控制台转储示例中,PANIC消息没有遵循标准格式。这通常意味着错误是由主核心代码而非驱动程序引起。在这种情况下,该消息包含有引起该告急的自陷类型的定义。这些自陷号的意义在/usr/include/sys/trap.h 文件中定义
并且归档到messages(M)手册页。在这种情况下,出现的是调页违例,这通常发生在驱动程
序或其它核心代码引用游离指针的时候。
13.5.5 检查系统文件中的出错历史
系统管理许多包含历史信息的文件,可以提供查找出问题原因的线索。最有用的几个文件是:
/usr/adm/messages 由核心记录的所有控制台信息的日志,包括出错消息及系
统启动信息。
/etc/conf/cf.d /config.h/ 核心参数及其当前值的清单。同样的信息也可以用
configure(ADM)命令查看。当系统绘出CONFIG出错
消息时,这种信息是很有用的。
/dew/srting/cfg 己安装的驱动程序清单。同样的信息也可以用hwconfig(C)命令
查看。
13.5.6 检查系统配置
系统配置故障可以造成许多问题,系统可能没有正确链接,进程可能失败,或者只是系统以某种奇特方式运行。
如果在调整核心参数或者增加新的软件包或硬件设备后遇到系统问题,请检查系统配
置。所有这些活动都记录在系统日志本中。你也可以研究记录在/usr/adm/messages文件
中的启动统计数据;如果核心的大小在两次引导之间有改变,就说明配置已被修改。操作系
统包括许多命令,帮助你检查系统配置的方方面面。其中较为重要的一些命令如下:
/etc/conf/cf.d/configure — x |more
核心参数的值。也可以直接查看/etc/conf/cf.d/config.h文件中的信息。
可以用 sar(ADM)命令获得关于可调整资源是如何作用的性能统计数据。crash
(ADM)命令的strstat功能或 netstat -m命令显示所配置的STREAMS资源的统计数
据,包括自最近一次系统引导起已溢出的结构的信息。
/etc/sysdef
某些影响核心数据结构的可调参数的当前值。
/usr/bin/swconfig -p
已安装或已从系统中删除的软件包的历史和确认。
/usr/bin/hwconfig -h
已安装的驱动程序。某些在/etc/rc.d脚本中安装的内存映像及被排除在外的驱
动程序。这个信息也可以在/dev/string/cfg中看到。
/etc/custom
软件包是否已全部或部分安装。
/etc/custom –v quick SCO :unix RTS –x
确认运行系统文件的存在、权限及属主特性。-x标志说明要进行错误修复(在可
能存在的地方)。最重要的是,这条命令修复任何已损坏从而导致不能访问这些
文件的符号链接。上面的命令仅检查操作系统运行软件包。要检查整个系统,使
用命令:
/etc/custom - V quick -x
custom 将检查操作输出的副本保留在 custom.VerifyReport中。还有其它检查操作
选项,以完成不同级别的检查。
/usr/bin/displaypkg
显示用installpkg( ADM)实用程序安装的软件的有关信息。这类软件包不在
custom(ADM)或swconfig(ADM)报告中出现。
/tcb/bin/fixmog -v
纠正系统文件权限,以匹配授权数据库。使用-i选项可以在交互方式下执行,因为
系统在改正任何不一致情况之前都会提示你。
/tcb/bin/cps pathname
与fixmog类似,但仅检查指定的文件,而不是所有的系统文件。
13.6 使用 crash( ADM)命令检查内存转储
crash(ADM)命令提供大量有用信息,特别是在安装驱动程序或进行其它核心开发工作
时要对 UNIX系统内部构造有很好的理解,才能充分利用所提供的信息。本节中的注释使你
能够从crash输出中获得关于系统告急的一些基本信息。
要在/dev/swap设备的内存转储上运行crash (在系统重新引导进入单用户态之后,但
在进入多用户态之前)须发出一个类似下面的命令。该命令假定系统在发生告急时引导的是
/unix.test 核心映像,并且将所有输出保存到/tmp/crash.out 文件中:
/etc/crash -d /dev/swap -n /unix.test -w /tmp/crash..out
例如,为了在已由ldsysydump(ADM)命令根据/unix核心映像写到/tmp/06may94文
件的内存转储副本上运行crash,使用下面的命令
/etc/crash -d /tmp/06may94 -w /tmp/crash.out
13.6.1 研究告急
下面的清单勾画出确定引起系统告急的核心成分的过程。
( l) 必须在/etc/default/boot 文件中设置PANICBOOT:No,才能进行这个工作。
(2) 当系统出现告急时,从控制台显示中记下告急的类型、EIP值以及按页计算的内存转储
大小。
(3) 当机器重新引导时,保存dump设备上 的核心转储映像。
(4) 使机器进人单用户态。
(5) 在映像上运行crash (ADM)。
(6) 在crash 中使用panic命令,找到发生告急的例程。要确保自陷类型和 EIP与告急
发生后从控制台屏幕抄录的自陷类型和 EIP相匹配。
(7) 注意系统发生告急时正在执行的例程名字(符号名),这是 Kernel Stack before
Trap行下第一个列出的函数。
(8) 退出crash命令。
(9) 用strings(C)或nm(CP)来确定该例程所在的驱动程序。你可以执行如下脚本,此
脚本使用strings命令。
:
for FILE in ‘find /etc/conf/pack.d –name ‘*.[oa]’ - print’
do
strings $ FILE|grep $1 && echo $FILE
done
如果此脚本作为findpanic安装,你可以带一个给出核心例程名字的参数运行该命令。
findpanic symbol_name
该脚本输出如下:
routine_name
/etc/conf/pack.d/foo/Driver.o
这说明 fm驱动程序可能造成了系统告急。
13.6.3 从 SCO获得更多帮助
如果你不能确定系统告急的起因,你可能需要向 SCO技术支持部门寻求帮助。除了安
装检查清单和在“求助之前”中要求你提供的其它配置信息外,还应准备一份内存转储清单,
这对于分析故障原因是很有用的。为了提供这些资料:
(1)将内存转储保存到磁带上,并且按照“从系统告急中恢复”中的讨论用 ldsysdump(ADM)
命令将它恢复到磁盘上。
(2) 用与下面类似的命令序列从转储中抽出关键的故障诊断报告:
#crash –d /tmp/06may94 –w /tmp/crash.out
> panic
> tracre
> user
> quit
记住,“>”提示符是由 crash命令产生的,所以不用录入。这个命令序列将创建一
个包含crash命令的panic,trace和user功能输出的/tmp/crash.out文件。
(3) 打印出/tmp/crash.out 文件,传真或用电子邮件把该文件传送给技术支持人员。
13.7 通常的系统范围内的问题
下面清单总结了一些较为普遍的系统范围内可能产生的问题:
· 运行图形终端或许多不同的网络协议的系统经常需要调整STREAMS可调参数的
值。过多的STREAMS资源会在控制台上及/usr/adm/messagee文件产生出错消息,
并且可能引起图形屏幕破坏或导致网络操作失败。这种情况可能产生许多奇怪情
况,譬如图形显示器中随机出现的竖线。如果系统时常出现奇异情况,使用 netstat
(TC) -m命令或者crash(ADM)中的strstat函数查看STREAMS资源是否有溢出。
· 如果来自系统 A的文件是以 NFS安装到系统 B上,而系统 A已被中止,系统 B可
能看上去不起作用了。假如有好几个系统 B上的进程试图访问以 NFS安装的文件,情
况尤其是如此;大部分系统资源将花费在企图访问已丢失的文件并记录失败信息的操作
上。卸下 NFS文件或重新引导系统 A都能解决这个问题;在大多数情况下,不必重新
引导系统 B。
· 除非你正在测试系统上的新驱动程序,否则控制台上和/usr/adm/messages文件中许
多看起来与正在执行的进程无关的模糊的核心消息,可说明一个关键系统构件比如内存
板或根文件系统所在的磁盘上的硬件出现故障。
· 如果在 DOS下内存映像的外设工作状况良好,而在 UNIX(系统下出现错误,那么试
一下按最一般要求重装设备及驱动程序。换句话说,将 VGA卡放进一个8位插槽
中;关闭RAM缓存、磁盘缓存及影子RAM,使用 l等待状态,在卡总线上用 ATCLK
(* Mhz)。任何需要用软配置的卡(如, wd8003e或3c503)都必须在 DOS下进行检
查。把所有共享 IRQ移到非共享位置,如果可以避免的话,不要使用 IRQ。检查端
口地址重叠,并且牢记智能的内存映像的串行卡不能缓存它们自己的内存映像。
当设备按一般要求安装,就应该能够正常工作,然后就可以恢复特殊功能,一次一
项,直到你确定哪项功能造成故障。
13.8 cron,at和 batch的故障诊断
cron( C)是用来调度作业的闹钟精灵进程,使其在设定时间自动运行。At和batch 命令可以由用户用来运行一次非交互式作业。其它信息参见 at(C)手册页。
13.8.1 cron精灵进程不运行
cron精灵进程在指定的日期和时间执行由 at( C),babch( C)和crontab( C)提交的命令。
(cron精灵进程是在系统开始进行多用户状态时由/etc/rc2. d目录下的一个脚本自动启动
的)。如果cron目前没有运行,而你试图由这些程序之一提交一项作业,系统显示下列
消息:
cron may not be running — call your system administrator
cron停止运行的另一个标志就是先前安排好的作业没有执行。使用下面命令查看
cron精灵进程是否正在运行:
ps -ef grep| crnn
如果没有 cron进程,该精灵进程就不在运行。要启动cron ,以root 注册并输入下面命令
sd cron
如果这样还不能启动cron进程,干脆重新引导系统。在初启过程中,系统显示如下消息:
! *** cron started *** pid =140 wed aug 31 14:02:27 PDT 1999
用 at,banch和cronntab调度的作业此时应该可以正常执行。如果 at和 batch继续报告出错消息,参阅 “at命令失败:不能改变作业方式”以便获取更多信息。
注意:如果持续出现这个问题,可以在/etc/default/cron 文件中输入CRONLOG=YES,
启动cron 日志。Cron 启动之后/usr/spool/cron/log 文件将保留所有cron 事务的记录。
这些信息可能帮助确定cron终止的原因。
13.8.2 at命令失败:不能改变作业方式
如果你没有核心特权,chmodsugid,在用户试图调at( C)和batch( C)命令时系统显示
下面消息:
Can’t change mode of job
要授予chmodsugid 特权,使得该用户可以使用 at命令.
要使所作的改变发生作用,用户必须注销,然后再注册。
这种情况和用户未被授权使用 at的情况不同。如果未经授权的用户试图使用 at,系统
显示如下:
at: you are not authorized to use at. Sorry .
要允许用户使用 at.
13.9失控的进程
失控的进程”是指进入无限循环并且不断创建新进程的进程。这样造成 proc进程表
溢出,引起其它进程失败并产生 No more processes:出消信息。
失控的进程可以造成键盘死锁,阻止系统接受用户键人的任何信息。因此,失控进程不
能从调用终端上终止。
要想继续工作,你必须确定并停止失控的进程:
( l)在一个未死锁终端(或控制台屏幕)上以 root注册。
(2)键入ps -ef命令并按<Enter>。系统显示当前所有进程的全部信息及其进程标识
号(PIDs)PID。找出失控进程的PID。你可以看到程序花费的 CPU时间超出了合理
范围,或者发现许多具有同一父进程的进程正在执行同一个程序。
(3)键人 kill PID 命令。该程序应在数秒内停止。如果该进程仍不停止,输入 kill -9
PID 命令。
最后那个命令可能留下临时文件,它们通常在程序正常终止时被删除;或者留下没有回
显的终端。
如果在你输入带有—9选项的 kill命令之后,失控进程仍不停止,那么该进程就是不可杀死的。如果不可杀死进程是一个用户的 shell程序,你必须停止该进程,该用户才能继续工作 .要停止不可杀死进程,必须引导系统,使用如下步骤:
( l)以root注册,并且用wallADM)向其它系统用户发消息,通知他们将要关机。
(2)当所有用户都退出注册,键人 init 6关机。接着返回到根提示符(#),但是关机过
程马上就开始了。
(3)在 Boot:提示处按< Enter>,重新引导系统。
当你再执行 ps时,就不会再显示不可杀死进程了。
第14章 系统性能与核心参数
在Unix运行过程中,对系统性能进行监护和管理是系统管理员的主要职责。系统性能管理主要是指对系统资源进行合理安排与分配。在系统负载较重的情况下,充分发挥系统的效率是非常重要的。
14.1系统性能监护
sar命令,sar是unix系统中,进行系统维护的重要工具之一。报告系统的活动情况:
文件的读写.系统调用的使用.串口.CPU利用.内存使用状况.进程活动以及IPC有关活动等。
如核心表中没有sar ,则执行 # /usr/lib/sa/sar_enable –y 重连核心
sar [选项] [-A] [ -o file] t [n]
其中n与t组合,t为采样间隔,n为采样次数 ,-ofile将执行结果以二进制存放在文件file中
sar [选项] [-A] [-s time] [-e time] [-i sec] [ -f fiel]
其中 –s为起始时间 –e为终止时间,-I表示在多少秒的间隔选择记录
选项
作用
选项
作用
-A
所有的报告总和
-O
异步AIO
-a
文件读写报告
-p
调页活动
-B
附加的buffer cache使用情况
-q
运行队列和交换队列的平均长度
-b
Buffer cache使用情况
-R
报告进程的活动
-c
系统调用使用报告
-r
没有使用的内存页面和硬盘块
-d
硬盘使用报告
-u
CPU利用
-g
有关串口I/O情况
-v
进程.i节点.文件和锁表状态
-h
关于buffer使用统计数字
-w
系统交换活动
-m
IPC消息和信号灯活动
-y
TTY设备活动
-n
命名cache
1.超常的页面活动
用户进程在运行过程中,占用内存的部分空间和硬盘上的交换区。如果用户进程要求使用的内存空间数量得不到满足,则进程的页面将被写到交换区中。在内存与硬盘之间传送页面,既要花费硬盘时间,也要花费CPU时间。
sar –p 页面故障vflt/s > 100
sar –q %swpocc > 20交换活动频繁
sar –r 自由内存freemem
sar –u %sys > 60
sar –w Swpin/s > 1
swap –l
方法:减少系统buffer cache/stream buffer (流缓冲区)
在unix核心表产生溢出现象时,都会出现类似的显示内容,其普通格式如:
CONFIG :错误描述信息(可调核心参数=n execeeded)
如 CONFIG :timeout – Timeout table overflow(NCALL=n execeeded)
这表名,呼出(call-out)核心表出现溢出。
14.2 系统核心参数
1.可调核心资源
unix的核心参数用来管理和控制资源的分配。共同点是经常被使用.释放并循环往复。
在系统安装后,核心参数初始为系统默认值。这些默认值对一般应用环境是适合的。因此,不是特殊要求,不必调整核心参数。
2 . 核心参数文件
a. /etc/conf/cf.d/mtune
包含的是在系统初次安装时系统全部可调参数的值,它门可以作为可调参数的
参考值。
格式:参数名 默认值 最小值 最大值
b. /etc/conf/cf.d/stune
包含的是那些经过调整指定的参数及它们的值
格式:参数名 值
注:可通过编辑文件mtune,stune的方式来修改核心参数, 但必须使用重新
连接核心
3 . 核心资源配置命令
unix系统提供了专门调整核心参数的命令(configure)与系统管理员shell修改核心的命令行:
1./etc/conf/cf.d/configure
显示系统中全部可配置的资源/etc/conf/cf.d/configure –f,
/etc/conf/cf.d/mtune显示文件 /etc/conf/cf.d/mtune
2. /etc/conf/bin/idtune参数 值
菜单方式:
从root注册,进入scoadmin—Kernel/Hardware—Tune Parameter,选择修改项
重新连接核心的方法: /etc/conf/bin/idbuild 或 /etc/conf/cf.d/link_unix
3. 可调核心参数
1).buffers management 缓存区管理
2).Processes and paging 进程与页面
3).TTYS
4).name
5).AIO 异步输入/输出参数
8).security 与安全有关的参数
12).streams 流是unix系统中为处理通讯协议而提供的一个标准化的接口
13).message queues 包含了一组与进程间通讯消息相关的可调核心参数。
15).semaphores 包含的是与进程间通讯消息信号相关联的可调核心参数。
16).shared data包含一组与进程间通讯共享内存相关联的可调核心参数。
18). Miscellaneous(混合的) device drivers and hardware parameters
不同硬件设备,其中包含DMA .VGA .显示.键盘.协处理器和硬盘控制卡等
14.3 交换区的管理
传统上, unix 的交换区是在安装系统过程中确定的。它的大小一经指定则不能在改变,除非重新安装系统。在Release 5中,swap命令可以把用作第一个或附加的系统交换空间配置作为一个文件,称为交换文件。这样就可以在系统运行中增加交换空间。系统中,新增加的驱动程序marry被用来把交换文件与块设备结合起来,这个块设备就是核心所需的交换区。
swap命令可对交换区进行增加.删除.监控。
语法结构:
1.增加交换区
#swap -a swapdev swaplow swaplen
其中:
swapdev特殊设备的名字,如/dev/dsk/0s1
swaplow交换区的起始偏移块号
swaplen交换区的长度(以块为单位,块长为512B)
2.删除交换区
#swap -d swapdev swaplow
3.显示交换区的信息
#swap -l
注: 使用swap命令增加交换区空间时,不要与其它子区产生重迭现象。因为使用这个命令时,系统不对是重迭进行检查,也没有提示信息。即增加交换区可能破坏其它系统文件
14.4.动态核心表
可动态调整的核心参数主要有:
MAX_PROC 进程表
MAX_REGION 区表(region)
MAX_FILE 打开文件表
MAX_INODE I节点表
MAX_DISK 硬盘驱动器表
MAX_MOUNT 文件系统安装表
MAX_FLCKREC 文件记录加锁表
TBLPAGES 定义用于动态表的最大内存页面数
TBLDMAPAGES 定义用于动态表的最大可直接访问的内存页面数
TBLLIMIT 任意一张动态表可能达到TBLPAGES值或TBLDMAPAGES
值的百分比
TBLSYSLIMIT 如果TBLPAGES的值是0,这个参数定义所有的动态表合在
一起使用的最大内存数量
TBLMAP 虚拟内存变换空间地址单元的数量
当设置的动态核心表长度不够时,可以在系统运行状态下动态增加它的长度。
命令:getconf和setconf
用来查寻和动态增加表的长度。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17749/showart_103821.html |
|