分类:
2007-07-30 23:03:52
Document #: 2811134C09000
Body:
[标题]关于TTY_OVERRUN错误
内容提要:
这篇文档主要介绍了在错误日志里出现TTY_OVERRUN错误的原因及纠正的方法
说明:
在HACMP环境下的,操作系统的错误日志里经常出现类似如下的错误:
LABEL: TTY_OVERRUN
IDENTIFIER: 9D30B78E
Date/Time: Tue Mar 9 04:18:39 BEIS
Sequence Number: 5593
Machine Id: 005A858A4C00
Node Id: ibm001
Class: S
Type: TEMP
Resource Name: tty0
Description
RECEIVER OVER-RUN ON INPUT
Failure Causes
EXCESSIVE LOAD ON PROCESSOR
Recommended Actions
REDUCE SYSTEM LOAD.
REDUCE SERIAL PORT BAUD RATE
这篇文档将要详细解释一下产生TTY_OVERRUN错误的原因并提供一些纠正此种错误的方法。
[说明]
进入一个串口的数据被设备驱动程序带进并存储到内核的一个缓冲器里,在一个用户程序来读取这些数据之前数据一直
保存在缓冲器里。TTY_OVERRUN错误不是tty的联接有问题,而是进程发送和接受数据的结果,tty只不过是建立了两个进程
之间通讯的联接。当一个进程发送数据太快而另一个进程读取的太慢,错误就会发生,在这种情况下,接受端数据堆积并且
溢出缓冲器,在缓冲器里老数据被推出新数据代替进入,错误就被记录到错误日志里。
[原因]
数据(噪音,真实的数据等)进入串口,但是没有用户进程来读取它,因此溢出缓冲器;如果实际上有一个进程读取数
据,但是数据进来的比进程能够处理的速度快这种错误也会发生。这种溢出在集群环境里ttys用作HACMP的心跳联接的情况下
比较常见。
它是由某些事情(可能是系统里一些别的驱动程序)把持着tty的中断以致于他们不能得到足够快地预期防止数据丢失而
引起的。
[ 解决方法]
检查看是否有进程在这个tty上运行:
#fuser /dev/ttyX
#ps -ef | grep ttyX
如果没有进程正在这个TTY上运行:
1.可能端口连接有一个不该连接在上面的设备 ,移出这个设备;
2.设备可能损坏了,更换掉这个设备;
3.电缆可能损坏了,更换掉电缆;
4.线路中可能有电磁干扰,用一根屏蔽了的电缆更换现在的电缆或者是消除电磁干扰的因素。
如果有一个进程正在这个tty上运行:
使用 "lsattr -El ttyX" 或者使用 "smit tty" 命令进入smit菜单来显示tty的属性,在电缆允许的情况下更改流控制
属性(flow control)到“RTS"(这个tty连接的另一端也需要把流控制设定为RTS);
如果流控制设定为RTS后仍然有溢出错误,调低速率到9600(这需要在连接的两端都要做),你能够通过以下命令来tty正在
运行的速率:
# stty -a < /dev/ttyX
如果tty被配置为9600,但是stty命令输出显示它正在运行一个更高的速率,那么运行在这个tty上的进程正在改变了速率,
在HACMP环境里这个进程是hatsd.
1)使用 HACMP/RSCT 配置步骤来降低线路速率到9600:
#smitty clstop - forced (在所有的节点上执行)
#smitty hacmp - configure cluster - cluster topology - configure network modules - chg/show a network module
在速率的参数区域更改为9600,然后同步拓扑结构,在所有节点上启动HA;
2)使用TTY配置步骤来降低"RECEIVE trigger level"参数到1:
# smitty tty
Change / Show Characteristics of a TTY
RECEIVE trigger level [1]
[附加信息]
如果在检查和纠正了上面提到的所有内容还有TTY_OVERRUN错误发生,那么附加的推荐措施是:
增加进程的优先权,升级或者增加处理器,减轻系统的负载。