【IT168 服务器学院】1)系统不能进入静态方式
开放系统以其非常好的能力连接不同的计算机软件,硬件。在这种环境下,诊断问题时就需要关注问题的全局与细节。本文就如果诊断INFORMIX-Online的问题给出了良好的建议。
诊断问题的症状
系统管理员诊断问题时首先要定义问题的症状。
系统是否难于进入静态(quiescent)状态?
是否有非正常结束的INFORMIX系统进程?
系统进程是否定期挂起?
下面的讨论指出如何定位系统问题,讨论可能的起因,并对这些问题的解决提出建议。
系统不能进入静态方式
该症状常常伴有一条错误信息。一般错误是:
tbinit:fatal error in shared memory creation (共享内存生成时有严重错误)
检查系统初始化时定义的系统日志文件来发现错误的出处。该日志的缺省名为$INFORMIXDIR/online.log。在此文件中会看到与下面相近的信息:
16:00:56 Cannot Open Primary Chunk ''/dev/turbo_root'',errno = 13
16:00:56 Cannot Open Primary Chunk ''/dev/turbo_root'',errno = 13
16:00:56 I/O error,Primary Chunk ''dev/turbo_root'' -- Offline
16:00:56 I/O lseek() chunk 1,pagenum 0, pagecnt 1 -->errno =9
16:00:56 INFORMIX-Online Stopped
这些错误是由UNIX权限问题造成的。OnLine产品需要由root来安装。系统的部分可执行程序应属于root或者root有权限。所有INFORMIX系统文件的属主及权限都应该记录在$INFORMIXDIR/etc/onlinefiles中。检查所有OnLine文件权限,属主,属组是否正确。
也应检查chunk的权限,保证CHUNK有UNIX权限660(crw-rw----),其属主,属组为informix,建议管理员使用系统管理员实用程序tbmonitor定义OnLine系统配置。初始化例程自动进行权限检查,计算可利用的磁盘空间,但如果配置文件是直接修改的,就并非如此了。
如果系统日志文件中并未记录有用的错误信息,而OnLine系统刚刚升级,则应检查确认页大小(与OnLine产品一道发送的缺省配置文件中定义)是否已经改变。若页大小变化了,就必须从老系统输出的数据(dbexport)再将数据输入到新系统上去(用dbimport)。
错误tbinit:fatal error in shared memory creation 经常伴有操作系统错误或者附加的OnLine错误。这也能用来判定问题为什么会发生。下列错误说明为何共享内存不能生成。
tbinit:shmget[EEXIT][17]:
tbinit:shmget[EINVAL][22]:
tbinit shmat[EINVAL][22]:
tbinit shmget[ENOSPC][28]:
Bad Primary Chunk ''/dev/devname''
tbinit:shmget[EEXIST][17]:
tbinit:shmget[EEXIT][17]:
这个错误表明共享内存段在申请的内存位置上已经存在。tbinit进程从环境变量TBCONFIG指定的文件读取配置。若TBCONFIG未指定,tbinit从$INFORMIXDIR/etc/tbconfig文件读取配置。一旦获取配置信息,tbinit派生一个子进程,它将成为tbinit后台进程。tbinit后台进程用唯一的SERVERNUM值做一部分输入值来计算共享内存键值,唯一的SERVERNUM值确保每个OnLine系统生成自己特定的共享内存空间。仔细检查以保证文件配置正确,SERVERNUM的值唯一。
tbinit:shmget [EINVAL][22]:or tbinit:shmat[EINVAL][22]
当无效参数传递给UNIX调用时,UNIX产生错误。用OnLine术语来说这意味着tbinit申请的共享内存未被分配。一旦UNIX接受SERVERNUM和共享内存键值,tbinit便可将Online共享内存段附加在它的虚拟地址空间上。虚拟地址,共享内存段要附加的tbinit(或其他的用户进程)的内存空间是由SHMBASE定义的。若SHMBASE的值不合法,或申请共享内存大于共享内存核心参数允许的值时,或共享内存段由于边界对齐问题而无法连续分配时,UNIX会认为传给共享内存附加调用的内存值是无效的。
现在对UNIX核心参数作一回顾,以下描述的时有关共享内存配置的参数。
核心参数
SHMSIZE 是操作系统范围内共享内存段的最大值(以k为单位)。
SHMMAX 是操作系统范围内共享内存段的最大值(以字节为单位)。
SHMMIN 是操作系统范围内共享内存段的最小值(以字节为单位)。
SHMMNI 是操作系统范围内共享内存标识的最小数值。
SHMLBA 是共享内存低段地址,也就是附加共享内存的边界地址
SHMSEG 是每个进程附加共享内存段的最大数目。
SHMALL 时系统范围内共享内存的最大量。
信号灯分配参数
SEMMNI 是操作系统范围内信号灯标识的最大值
SEMMNS 是操作系统范围内信号灯的最大值
SEMMSL 是每个标识信号灯的最大值。
参数值的定义
SHMALL*操作系统页大小=全部可能的共享内存(以字节为单位)。
SHMMAX=SHMSIZE*1024.
SHMMNI*SHMMAX=操作系统范围内可编址的共享内存(以字节为单位)。
SHMSEG*SHMMAX=一个操作系统进程可编址的共享内存(以字节为单位)。
参数设置指导:
规则1 SHMALL * 页大小 >= SHMSEG * SHMMAX
规则2 SHMALL * 页大小 = SHMNI * SHMMAX
规则3 SHMMSL = 主机用户进程数/25
规则4 SHMMAX > SHMLBA
tbinit: shmget[ENOSPC][28]:
当系统申请空间,而设备已满时,UNIX产生该错误。UNIX申请共享内存的交换区,保证交换空间驻留的设备上有足够的空间。没有足够的共享内存ID时也会发生错误,检查系统SHMMNI核心参数。
Bad Primary Chunk ''/dev/devname''
由于控制器,硬件或者权限问题,使得向chunk写失败时,Online标记该chunk为down,这样做的目的是为了通知管理员数据完整性已经被破坏,检查系统日志文件中I/O错误。以下是典型的硬件I/O错误的例子:
I/O error,Primary Chunk ''/dev/rdsk/devname'' -- Offline
I/O read(),Chunk 2,pagenum 272714,pagecnt 1 -->errno =5
I/O write() chunk 2,pagenum 2,pagecnt 1 --> errno = 5
发生I/O错误时,检查控制器和硬件。许多UNIX系统提供检查未安装原始设备的低级别实用程序,不要在未安装的原始设备上使用fsck命令,这是因为fsck会覆盖设备上存储的信息,为恢复系统,INFORMIX建议管理员恢复最后的存档,用日志恢复失败了的写操作。
一旦共享内存初始化完成,物理日志从上一次检查点开始检查物理日志的前象,如果该记录存在,开始FAST RECOVERY,进入物理恢复,每个前映象写回到磁盘上正确的位置上,一旦完成后,逻辑恢复开始,并处理上次检查点之后逻辑日志中记录所对应的事务,如果快速恢复非正常结束,或是不能让OnLine进入静态(Quiescent)方式,则让OnLine进入脱机(off-line)方式,再启动OnLine。若OnLiner仍不能进入静态方式,则应该恢复系统存档。