OracleLinux的MTU问题


问题描述

近期有两次出现

OS system dependent operation:sendmsgfailed with status: 105

OS failure message: No buffer spaceavailable

的问题。

具体报错:

ORA-00603: ORACLE server session terminatedby fatal error

ORA-27504: IPC error creating OSD context

ORA-27300: OS system dependentoperation:sendmsg failed with status: 105

ORA-27301: OS failure message: No bufferspace available

ORA-27302: failure occurred at: sskgxpsnd2


 

问题共性

在其他集群中又出现了同样的问题。

经过排查,和上一次的故障内容相似。

1、  主机操作系统都是Oraclelinux

2、  都是在内存使用紧张的时候,出现进程无法正常工作,根本原因为OS failure message: No buffer space available。

3、  主机loopback 网卡的MTU 都是65536。

 

来自官方的回复

 

On servers with High Physical Memory, the parameter vm.min_free_kbytes should be set in the order of 0.4% of total Physical Memory. This helps in keeping a larger range of de-fragmented memory pages available for network buffers reducing the probability of a low-buffer-space conditions



需知

注意上面的共性。

1、  Oracle Linux

2、  lo MTU=65536

3、  内存资源紧张

4、  修改lo MTU的值后,进程启动正常

 

现在发现的两例状况是Oracle Linux,lo MTU=65536,Oracle RAC。但是单机数据库,或者应用服务器在内存资源紧张的时候,如果调用了系统的sendmsg()也可能出现同样的问题。

所以,每一个Oracle Linux都需要看一下本机的loopback 网卡的MTU值。

 

 

那么需要做的事情如下:

1、  查看自己拥有的OracleLinux的服务器

2、  查看loopback 网卡的MTU值

3、  修改loopback 网卡的MTU值(当前生效),以及ifcfg文件(重启生效)。无需servicenetwork restart

4、  修改/etc/sysctl.conf文件,增加vm.min_free_kbytes参数,值为物理内存的0.4%。(例如8g内存,vm.min_free_kbytes=8*1024*1024*0.004=33554)。如官方文档所示增加此参数可以减少问题出现的概率。


 

修改方法


ifconfig lo mtu 16436


/etc/sysconfig/network-scripts/ifcfg-lo

 

DEVICE=lo

IPADDR=127.0.0.1

NETMASK=255.0.0.0

NETWORK=127.0.0.0

# If you're having problems with gatedmaking 127.0.0.0/8 a martian,

# you can change this to something else(255.255.255.255, for example)

BROADCAST=127.255.255.255

ONBOOT=yes

NAME=loopback

MTU=16436

 

其他内容

 

sendmsg()

使用的是lo本地回送地址。

 

Lp(LOOPBACK)

本地环回接口(或地址),亦称回送地址()

 

MTU

通信术语 最大传输单元Maximum Transmission UnitMTU

不是越大越好,越大,延迟越高,越容易丢包。

 

 

你可能感兴趣的:(Oracle,Linux,OracleRAC)