如您所见,提交的内存量逐渐增加,导致交换文件被使用.令我感到奇怪的是,非活动内存的数量也在不断增长.我的理解是,非活动内存实际上已释放内存但尚未被操作系统清理并放回到空闲内存池中.似乎缺乏清理工作导致内存耗尽,但我可能错了.
您能否提供一些提示,找出问题的原因和/或使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表可能标记为“可重用”,它可能会释放它.