linux – 什么可以导致非活动内存增加以及如何回收它?

前端之家收集整理的这篇文章主要介绍了linux – 什么可以导致非活动内存增加以及如何回收它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在CentOS服务器上运行繁重的应用程序,我看到一个奇怪的内存行为.这是munin图的快照:

如您所见,提交的内存量逐渐增加,导致交换文件被使用.令我感到奇怪的是,非活动内存的数量也在不断增长.我的理解是,非活动内存实际上已释放内存但尚未被操作系统清理并放回到空闲内存池中.似乎缺乏清理工作导致内存耗尽,但我可能错了.

您能否提供一些提示,找出问题的原因和/或使CentOS回收非活动内存?

谢谢.

一些额外的信息:

1)我在/ tmp上安装了一个tmpfs,并且存储的文件数量增加(但它是非活动内存量的两倍).

2)cat / proc / meminfo(在比图像更晚的阶段)给出:

MemTotal:     14371428 kB
MemFree:       1207108 kB
Buffers:         35440 kB
Cached:        4276628 kB
SwapCached:     785316 kB
Active:        9038924 kB
Inactive:      3902876 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:     14371428 kB
LowFree:       1207108 kB
SwapTotal:    10223608 kB
SwapFree:      6438320 kB
Dirty:          627792 kB
Writeback:           0 kB
AnonPages:     7844560 kB
Mapped:          49304 kB
Slab:           146676 kB
PageTables:      27480 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:  17409320 kB
Committed_AS: 16471488 kB
VmallocTotal: 34359738367 kB
VmallocUsed:    275852 kB
VmallocChunk: 34359462007 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB

3)该应用程序是MysqL,Heritrix(http://crawler.archive.org/)和基于Tomcat的Java servlet的组合,用于管理事物.

解决方法

It is my understanding that the inactive memory is actually memory
freed up but not yet clean by the OS and put back in the free memory
pool.

这是错误的. “非活动”内存是主动映射的内存,一段时间内任何应用程序都没有使用它.当它的时间交换时,内存取自标记为这样的页面并换出.它也可以用于换出以支持页面缓存.

As you can see the amount of committed memory increases gradually
causing the swap file to be use. What strikes me odd is that the
amount of inactive memory keeps growing as well.

两者不一定相关,但对我来说,这看起来好像有什么东西在泄漏记忆.事实上,任何应用程序都没有访问页面,并且交换增长也表明有些事情是分配内存,忘记它然后不释放它.

内存可能是“非活动的”,例如,如果调用malloc().这是一个可以分配一块内存的libc调用,但实际上只有一部分用于执行任何工作(少于分配的页数).即使你在malloc中释放它并不意味着你通过要求操作系统这样做来释放内存,它只是mallocs表可能标记为“可重用”,它可能会释放它.

猜你在找的Linux相关文章