Linux OS缓存对程序性能影响

Linux OS缓存对程序性能影响,第1张

最近又出现了一个问题:同样的一个C程序,在同样的数据集,单线程,在不同的机器上跑,性能差距高达30倍以上(30s/1000s)。程序内存消耗不足300MB,数据集大小近100GB。

这两台机器的配置分别是:

分别称A和B机器。

从主频来看,B机器的CPU反而更高一些(查阅CPU天梯表,Core i7型号的CPU跑分也高一些)。

那么问题应该出在内存上。通过free -h命令查看内存使用情况,发现A机器RAM的 buffered/cached 高达100GB以上。这立即引起了我的警觉,会不会是数据集被缓存进了系统内存?

于是释放缓存(syncecho 3 >/proc/sys/vm/drop_caches)

然后再执行程序,好了,A机器执行无比缓慢。

究其原因,我的程序是一个基于索引的查询算法,这个程序刚好运行在索引构建算法之后,因此查询时涉及到的源数据访问,全都在索引构建算法的访问范围之内,因此被缓存进内存。

这也提了个醒,任何比较效率的算法,首先要在程序运行前清空缓存,否则不能反映真实情况,因为I/O的代价可能都变成了内存访问,使得结果过于乐观。

查看系统内存的使用状态

监控报警可用内存空间不足,常规的解决方案如下:

本文将介绍定期清除页面缓存,但是过会儿内存又被占满问题的分析。

查看更详细的内存信息:

$ cat /proc/meminfo |grep -E "Buffer|Cache|Swap|Mem|Shmem|Slab|SReclaimable|SUnreclaim"

清除缓存策略:

1:清除page cache

2:清除slab分配器中的对象(包括目录项和inode)

3:清除page cache和slab分配器中的对象

OOM killer及Overcommit

Linux buffer/cache 内存占用过高的原因以及解决办法

Linux查看Buffer&Cache被哪些进程占用


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/6044239.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-12
下一篇2023-03-12

发表评论

登录后才能评论

评论列表(0条)

    保存