700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux系统snmpd服务内存偏高 Red Hat Enterprise Linux 5.4 64位系统SNMP内存泄漏(上)

linux系统snmpd服务内存偏高 Red Hat Enterprise Linux 5.4 64位系统SNMP内存泄漏(上)

时间:2020-10-25 06:37:30

相关推荐

linux系统snmpd服务内存偏高 Red Hat Enterprise Linux 5.4 64位系统SNMP内存泄漏(上)

1、SNMP的内存泄漏问题

SNMP的内存泄漏问题,我最早是在CDN的一台负载均衡调度机上看到的。一个snmpd进程,占用的VIRT将近4G。重启snmpd后VIRT降到150M左右,机器为Red Hat Enterprise Linux Server release 5.4 (Tikanga),64位机。当时纯粹地以为它只是占用内存大,没有想到内存泄漏这块。后来我跟连铭提起这事,他一针见血地说到了原因。

经过排查发现,rhel4上的snmpd占用的VIRT虚拟内存量不超过20M,同样版本红帽,32位系统上貌似没有这个问题。rhel 5.4 64位自带的snmpd版本是5.3.2.2-7。后来我们将它升到了5.3.2.2-9。这个版本有没有修复前一个小版本的Bug,我们不得而知。对于rhel 5U4而言,我们的yum源上也只有5.3.2.2-9的rpm。

2、OID

接下来再零零碎碎地写一些吧。首先是关于机器上某个进程所占用的内存量的问题,有两个OID可以特别关注一下:

1.3.6.1.2.1.25.4.2.1.2 这个OID是取得进程名称的

1.3.6.1.2.1.25.5.1.1.2 这个OID是取得内存占用量的

3、Linux内存管理中的一些概念

需要理解的是以下概念,是从网上摘抄的:

o: VIRT (Virtual Image) - 进程使用的总虚拟内存 (virtual memory) 大小,包括进程的程序码、资料和共享程序库再加上被置换 (swap out) 的空间。VIRT = SWAP + RES

p: SWAP (Swapped size) - 进程被置换的虚拟内存空间大小。

q: RES (Resident size) - 进程非被置换的实体内存大小。RES = CODE + DATA

r: CODE' (Code size) - 进程的程序码在实体内存占用空间大小,亦叫作 text resident set (TRS)。

s: DATA (Data+Stack size) - 进程占用实体内存中的非程序码部份大小,亦叫作 data resident set (DRS)。

t: SHR (Shared Mem size) - 进程使用的共享内存大小,即可以和其他进程共享的内存空间。

n: %MEM (Memory usage) - 进程占用实体内存大小对系统总实体内存大小的比例,以百分比显示。

4、取得SNMP的内存使用量

所以,如果我们要取得某个进程所占用的内存,基本上只要取RES的值就可以了。而且事实证明,1.3.6.1.2.1.25.5.1.1.2这个OID通过SNMP也是取RES值做为内存消耗量。

要想取得RES值,方法有很多:

1、用上面说的snmp OID的方法

2、用ps -eo cmd,rss |grep snmp命令,直接拿到RES字段

3、读/proc/pid/status文件,其中有个VmRSS,就是RES的值

希望在下一篇日志中,SNMP的内存泄漏问题能够得到彻底解决。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。