服务器后台程序的内存使用问题

本文讨论了一个服务器后台程序存在的内存使用问题,主要涉及内存泄漏和STL map的内存管理。通过分析 `/proc/meminfo` 输出,探讨了Linux内存管理机制,特别是缓存和交换内存的作用。作者尝试了不同的内存释放策略,如map的clear操作和swap操作,但未能有效解决内存泄漏。最终,通过一个简单的测试程序,确认了系统并未出现内存泄漏,而可能是Linux内存管理策略导致的内存持续分配。文章提出了需要进一步研究STL内存池和Linux内核以了解内存是否真正归还给系统。
摘要由CSDN通过智能技术生成

目前我开发的一个服务器后台程序存在这么一个问题,由于我的程序要不断的收发消息,并做统计,统计用的是stl的多重map,在统计中会不断的往map里赛数据。但是每次统计后我都会调用clear()去释放内存,但是似乎并不奏效,仍然会有泄漏的现象。查资料,map的clear是将map内容清空,但是内存并不归还给系统,而是缓冲在内存池里以方便下次调用,有人提出,可以新建一个map,将两个map做swap操作,互换内容,然后delete这个新map,达到释放的效果,但是不奏效。我也想到多重map,是否需要将多重map里的小map对象也一一clear,然后再clear这个多重map,但是也不奏效。难道stl真的存在这个问题吗?

如下是机器cat /proc/meminfo的内容:

MemTotal:       23929284 kB
MemFree:         1238556 kB
Buffers:          198708 kB
Cached:         16489584 kB
SwapCached:            0 kB
Active:          7130900 kB
Inactive:       10959804 kB
Active(anon):    1402564 kB
Inactive(anon):     2504 kB
Active(file):    5728336 kB
Inactive(file): 10957300 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:      10485752 kB
SwapFree:       10485752 kB
Dirty:               312 kB
Writeback:             0 kB
AnonPages:       1402460 kB
Mapped:            19048 kB
Shmem:              2616 kB
Slab:            2303932 kB
SReclaimable:    1053828 kB
SUnreclaim:      1250104 kB
KernelStack:        1896 kB
PageTables:        15248 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    22450392 kB
Committed_AS:    2153752 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       71416 kB
VmallocChunk:   34359661160 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:    24576000 kB
DirectMap2M:           0 kB

引用红帽的解释,对各字段解释。http://www.redhat.com/advice/tips/meminfo.html

"Free," "buffer," "swap," "dirty." What does it all mean? If you said, "something to do with the Summer of '68", you may need a primer on 'meminfo'.

The entries in the /proc/meminfo can help explain what's going on with your memory usage, if you know how to read it.

Example of "cat /proc/meminfo":

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值