Linux /proc/meminfo显示了一些内存使用情况统计信息。
MemTotal: 4040732 kB MemFree: 23160 kB Buffers: 163340 kB Cached: 3707080 kB SwapCached: 0 kB Active: 1129324 kB Inactive: 2762912 kB
他们之间有相当多的重叠。 例如,据我所知,可以有活动页面caching(属于“caching”和“活动”)和非活动页面caching(“非活动”+“caching”)。
我想要做的就是测量“空闲”内存,但是这样做的方式是将使用的页面包含在内,而这些页面可能会被丢弃,而不会对整个系统的性能产生重大影响。
起初,我倾向于使用“free”+“inactive”,但是Linux的“free”工具在其“缓冲区调整”显示中使用了“free”+“cached”,所以我很好奇它是一个更好的方法。
是否可以locking我的应用程序中的公共控件使用的内存?
访问linux虚拟内存
进程使用的实际物理RAM
当内核内存不足时,页面的优先级下降以及衡量可用内存的更合适的度量标准是什么?
内存泄漏和用户体验不佳
如何在Linux 64bit机器上find你的数据结构实现的内存布局
虚拟机pipe理程序guest os中的内存地址转换
连续的内存块如何减less内存访问时间?
64位大型mallocs
由于“可用内存”的意义取决于你的目的,你的目的是避免OOM的情况:
看看Qt Extended(以前的Qtopia)如何预测OOM的情况。
有两个事件:
(MemFree + Buffers + Cached)/ MemTotal <treshold(在/proc/meminfo )
主要页面错误> treshold(我认为/proc/vmstat pgmajfault)
首先是内存不足的早期预警,并触发对页面错误的更频繁的监控。 第二个信号破坏,杀死系统的性能,是一个很好的暗示OOM杀手将运行。
起初,我发现你的问题很容易,因为在实践中,从'+缓冲区/缓存'列中的free输出是我使用的,它通常工作。
但是,其中一个不工作的情况是当你对相同的块进行大量阅读时。 例如一遍又一遍读取相同的1 gb_file:
while true; do cat 1gb_file >/dev/null; done
如果您的系统具有> 1 GB的缓存,那么这将运行得很快。 但是,如果您开始使用某些缓存来处理其他事情,则会粉碎系统的性能。
因此,当您评估解决方案时,请尝试以上方法,看看解决方案是否考虑到了这一点。
我使用以下内容:
FREE_KB = MemFree + Buffers + Cached FREE_KB=$(($(echo `sed -n '2p;3p;4p' < /proc/meminfo | sed "s/ +/ /g" | cut -d' ' -f 2 ` | sed "s/ /+/g"))) USED_KB = MemTotal - MemFree - Buffers - Cached USED_KB=$(($(echo `head -n4 /proc/meminfo | sed "s/ +/ /g" | cut -d' ' -f 2 ` | sed "s/ /-/g")))
在linux-3.14中,在/ proc / meminfo中有一个新的度量MemAvailable。
并在免费的输出中检查“ – / + buffers / cache:”行。
我想说,很难测量哪些页面被丢弃,会导致系统对整个系统性能产生重大影响。 用户进程使用的页面将是(Total) – (Free + Cached + Paged)。 第二项是内核可以根据需要释放的所有内存。 但是,释放用于缓存和页面的内存页面将对整体系统性能产生重大影响。
如果我打算使用启发式,那么我应该说你应该把“非活动”这个值定义为“缓冲区或页面高速缓存的总量,以千字节为单位,这是免费和可用的。最近没有被使用,可以回收用于其他目的。“ 如果您发现系统可以继续正常工作,那么您可以估计一些“活动”百分比,以此作为猜测,因为系统最近可能使用了一些页面,但不会再使用它们。 你比我更了解这个系统。 如果系统专门用于你要做的任何事情,那么很快就可以使用Active的页面和缓存文件将取决于系统是否最近被用于其他事情。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。