CentOS6.5 32位Out of Memery问题分析

来源:互联网 发布:监控windows 资源命令 编辑:程序博客网 时间:2024/06/05 10:49

CentOS6.5 32位Out of Memery问题分析

近日,部署应用程序的CentOS操作系统频繁kill应用进程,感到非常意外。通过对系统日志进行分析,发现syslog中输出out of memery,LowMem不足。

经过查阅大量的资料,分析发现是由于32位系统寻址空间的限制。32位linux将内存空间分为三部分:DMA、Normal(LowMem)、HighMem。其范围如下:

Zone PFN ranges:
DMA 0x00000001 -> 0x00001000
Normal 0x00001000 -> 0x000375fe
HighMem 0x000375fe -> 0x0023f800

其中,DMA为系统直接存储器空间,LowMem为系统低端内存,主要为Linux内核使用,HighMem为通用内存。(注:64位系统基本都是LowMem)

一般情况下,16G内存的IBM服务器LowMem约700M,系统启动后剩余约600M。

经过对各个进程进行分析后发现,有一个进程会对内核协议栈参数进行优化,使得socket缓冲过大,从而导致LowMem耗尽,从而触发了OOM问题。

OOM(Out Of Memery)是Linux下一种保护机制,保证机器能够正常运转的机制。该机制在内存耗尽时会通过kill一些进程来释放LowMem。同时会在系统日志中输出相应的Log。

Linux下内核各参数意义

/proc/sys/net/core/wmem_max        最大的socketsocket缓存大小(Byte)/proc/sys/net/core/wmem_default    默认的socketsocket缓存大小(Byte)/proc/sys/net/core/rmem_max        最大的socketsocket缓存大小(Byte)/proc/sys/net/core/rmem_default    默认的socketsocket缓存大小(Byte)/proc/sys/net/ipv4/tcp_wmem        TCP socketsocket缓存大小(Byte)/proc/sys/net/ipv4/tcp_rmem        TCP socketsocket缓存大小(Byte) /proc/sys/net/ipv4/tcp_mem         TCP socket缓存大小(单位:页,每页4k大小) /proc/sys/net/ipv4/udp_mem         UDP socket缓存大小(单位:页,每页4k大小) /proc/sys/net/ipv4/udp_rmem_min    UDP socket接收缓冲去最小值/proc/sys/net/ipv4/udp_wmem_min    UDP socket发送缓冲区最小值

特别注意:tcp_mem及udp_mem两者单位均为页内存。

最后通过调整上述参数,使得系统得到优化,同时不影响用户面性能。

其他解决方案:

1,升级系统至64位,64位系统基本都是LowMem,不存在LowMem不足问题。

2,其他方案均没有成功得到验证。

附:

1.查看socket占用内存情况:

cat /proc/net/socket

2.查看socket buff情况

slabtop:

skbuff_head_cache


Juyin@2017/12/19

原创粉丝点击