linux内存显示buff,能不能让Linux不要对内存buff/cache辣么饥渴?

讨论了在KVM+Ceph环境中如何优化Linux系统的内存管理策略,包括调整buff/cache的使用及swap分区的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20 个回复

a582bcbada2697988ab88bb6a55895f3.png

iwannabe

I wanna be

2019-02-13

http://www.newsmth.net/nForum/article/KernelTech/72788?s=72788

【 在 i00i (烟灰·独孤求胖) 的大作中提到: 】

:

: 因为buff/cache占了太多的内存又不会及时自行释放,导致系统开始使用虚拟内存,

: 拖慢系统不说,虚拟内存用量高了监控还得告警……

: ...................

957c7d8f6c38a8b19fedbae61190b165.png

i00i

烟灰·独孤求胖

2019-02-13

多谢~

sync后

echo 3 > /proc/sys/vm/drop_caches

能临时解决问题,不过老这么干也不是个事啊,或者说将之加入crontab?

我这边的场景是kvm宿主机+ceph,buff/cache对ceph有一点帮助,

但是对于qcow2及其备份来说就是鸡肋,而实际上巨大的buff/cache正是这样产生的。

a582bcbada2697988ab88bb6a55895f3.png

ilovecpp

cpp

2019-02-13

这个因为...导致...的因果关系不成立。只要你有swap,没有cache的时候照样会有换出。最干脆的办法是不要挂载swap分区,你80G内存挂4G swap有什么意义?

【 在 i00i 的大作中提到: 】

:

: 因为buff/cache占了太多的内存又不会及时自行释放,导致系统开始使用虚拟内存,

: 拖慢系统不说,虚拟内存用量高了监控还得告警……

: ...................

957c7d8f6c38a8b19fedbae61190b165.png

i00i

烟灰·独孤求胖

2019-02-13

了解,vm.swappiness Debian默认记得是60,可用内存超过60%时是不会倾向于使用swap的,后来我改成10了。

不挂swap对我的场景估计不行,因为内存主要是给虚机使用的,虚机把物理内存塞爆的话没有swap大概率oom。

是否使用swap,策略上应该是把buff/cache占用的也算上的,参照的是free,所以即便vm.swappiness=10,

qcow2做一次备份,buff/cache塞满,free不足10%,就会使用swap。

我姑且先把vm.vfs_cache_pressure 改成 200试试吧。。按理说效果不会太理想。

【 在 ilovecpp 的大作中提到: 】

: 这个因为...导致...的因果关系不成立。只要你有swap,没有cache的时候照样会有换出。最干脆的办法是不要挂载swap分区,你80G内存挂4G swap有什么意义?

a582bcbada2697988ab88bb6a55895f3.png

ilovecpp

cpp

2019-02-13

虽然很多文章这样说,但这种对swappiness的理解是错误的。

正如kernel文档所写,swappiness是一个比值,它越低就越倾向于drop cache而不是换出匿名页。但只要它不为0,就总有一定比例的匿名页被换出。具体来说,当swappiness设置为最大值100时,同等倾向于drop cache和换出匿名页。而swappiness设置为1时换出匿名页比例最小。设置为0时只在接近OOM时换出匿名页。

你理解的这个“可用内存比例”的阈值不存在。

https://github.com/torvalds/linux/blob/1f947a7a011fcceb14cb912f5481a53b18f1879a/mm/vmscan.c#L2282

【 在 i00i 的大作中提到: 】

: 了解,vm.swappiness Debian默认记得是60,可用内存超过60%时是不会倾向于使用swap的,后来我改成10了。

: 不挂swap对我的场景估计不行,因为内存主要是给虚机使用的,虚机把物理内存塞爆的话没有swap大概率oom。

: 是否使用swap,策略上应该是把buff/cache占用的也算上的,参照的是free,所以即便vm.swappiness=10,

: ...................

957c7d8f6c38a8b19fedbae61190b165.png

i00i

烟灰·独孤求胖

2019-02-13

大赞科普~

对于Linux内核我确实外行。

我的诉求应该也是Linux优化的一种常见情况吧:

1、因为大文件(GB级)长时间滞留内存没有额外好处,所以希望buff/cache尽少占用尽快释放,以免导致swap过早使用;

2、与1相关的,当free不足而buff/cache大量占用时,优先释放buff/cache而避免swap过早使用。

1和2只要有一条能实现,对于我的使用场景来说就算优化了。

这么理解可以么?

根据您的介绍,是不是让swappiness=1或0就能实现我说的2呢?

【 在 ilovecpp 的大作中提到: 】

: 虽然很多文章这样说,但这种对swappiness的理解是错误的。

: 正如kernel文档所写,swappiness是一个比值,它越低就越倾向于drop cache而不是换出匿名页。但只要它不为0,就总有一定比例的匿名页被换出。具体来说,当swappiness设置为最大值100时,同等倾向于drop cache和换出匿名页。而swappiness设置为1时换出匿名页比例最小。设置为0时只在接近OOM时换出匿名页。

: 你理解的这个“可用内存比例”的阈值不存在。

: ...................

ab70fbe02f36b073951f6e523b236d2c.png

lvsoft

Lv(The Last Guardian)

2019-02-13

我还是不理解你干嘛要挂swap。

你说不挂swap有oom的风险,但你物理内存80g,swap 4g,多了这4g难道就没oom风险了?

现代os的内存基本用途就是一层cache(这里的cache是广义的意思,跟你理解的

buff/cache狭义含义不同),你开了swap,冷数据自然会被交换出去换更大的cache空

间,这是必然发生的。

buff/cache是一种优化机制,简单的说就是不用白不用的意思,自然也不存在主动释放的

意义。你可以想象成你的钱存在了余额宝里面,钱还是在那里,要用就跟现金一样。

【 在 i00i (烟灰·独孤求胖) 的大作中提到: 】

: 大赞科普~

: 对于Linux内核我确实外行。

: 我的诉求应该也是Linux优化的一种常见情况吧:

: ...................

957c7d8f6c38a8b19fedbae61190b165.png

i00i

烟灰·独孤求胖

2019-02-13

关于swap,我是把预留给虚机的内存抹掉,为保障Linux本身和ceph能正常运行而设置的。

比如预想70GB给虚机,10GB给Linux和ceph,那么就相当于10GB的内存配4GB的swap。

这是一台proxmox服务器,按HCI方式部署的,可以姑且理解为KVM+Ceph,OSD也要共用内存。

“不用白不用”是理解了,问题在于“用了也白用”而且影响到swap……

以截图的这台物理机来说,那堆buff/cache就是在做虚机备份(把qcow2压缩为lzo)时产生的,

因为CPU能力有限,压缩并落盘的吞吐量磁盘还是能承受得起,并不依赖cache的帮助,

而且,压缩完落盘之后,这些lzo被再次ACCESS的概率≈0,留在内存里也白瞎啊。。

相反,ceph有些数据块留在cache里应该是有意义的,但是因为那些lzo滞留在内存,

反而逼得ceph操纵的数据块去使用swap了(实际观察到的情况)。

现在这个节点的KVM的负荷不高,实际只用了20GB左右,但是没经过业务高峰的考验,不敢贸然干掉swap。

【 在 lvsoft 的大作中提到: 】

: 我还是不理解你干嘛要挂swap。

: 你说不挂swap有oom的风险,但你物理内存80g,swap 4g,多了这4g难道就没oom风险了?

: 现代os的内存基本用途就是一层cache(这里的cache是广义的意思,跟你理解的

: ...................

a582bcbada2697988ab88bb6a55895f3.png

iwannabe

I wanna be

2019-02-13

不知道弄个ramdisk, dd一个文件做swap如何,呵呵

【 在 i00i (烟灰·独孤求胖) 的大作中提到: 】

: 关于swap,我是把预留给虚机的内存抹掉,为保障Linux本身和ceph能正常运行而设置

: 的。

: 比如预想70GB给虚机,10GB给Linux和ceph,那么就相当于10GB的内存配4GB的swap。

: 这是一台proxmox服务器,按HCI方式部署的,可以姑且理解为KVM+Ceph,OSD也要共用

: 内存。

: ...................

a582bcbada2697988ab88bb6a55895f3.png

zhlyang

New Life

2019-02-13

那跟完全不用swap没啥区别吧?

【 在 iwannabe (I wanna be) 的大作中提到: 】

: 不知道弄个ramdisk, dd一个文件做swap如何,呵呵

a582bcbada2697988ab88bb6a55895f3.png

iwannabe

I wanna be

2019-02-13

有些应用强制要求swap,比如oracle

【 在 zhlyang (New Life) 的大作中提到: 】

: 那跟完全不用swap没啥区别吧?

ab70fbe02f36b073951f6e523b236d2c.png

lvsoft

Lv(The Last Guardian)

2019-02-13

nod,但我相信他不会遇到这个傻x case

【 在 iwannabe (I wanna be) 的大作中提到: 】

: 有些应用强制要求swap,比如oracle

ab70fbe02f36b073951f6e523b236d2c.png

lvsoft

Lv(The Last Guardian)

2019-02-13

我已经说了,现代os,内存就是一层cache。你可以写个程序malloc 1tb内存,再fork

100份试试看。理论上你要用100tb内存,实际上程序照样跑的很欢没任何毛病。

所以你只要保证你的物理内存>你实际应用需求就行,不用什么预留内存。这年头malloc

基本可以认为永远不会返回out of memory错误,只会触发kernel oom强制kill。

的。

内存。

【 在 i00i (烟灰·独孤求胖) 的大作中提到: 】

: 关于swap,我是把预留给虚机的内存抹掉,为保障Linux本身和ceph能正常运行而设置

: 比如预想70GB给虚机,10GB给Linux和ceph,那么就相当于10GB的内存配4GB的swap。

: 这是一台proxmox服务器,按HCI方式部署的,可以姑且理解为KVM+Ceph,OSD也要共用

: ...................

a582bcbada2697988ab88bb6a55895f3.png

iwannabe

I wanna be

2019-02-13

http://www.newsmth.net/nForum/article/KernelTech/72788?s=72788

实际上还是有差别的

【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】

: 我已经说了,现代os,内存就是一层cache。你可以写个程序malloc 1tb内存,再fork

: 100份试试看。理论上你要用100tb内存,实际上程序照样跑的很欢没任何毛病。

: 所以你只要保证你的物理内存>你实际应用需求就行,不用什么预留内存。这年头

: malloc

: ...................

a582bcbada2697988ab88bb6a55895f3.png

huang10zhi

heiheiha

2019-02-13

这100tb不就超过物理内存了吗?

【 在 lvsoft 的大作中提到: 】

: 我已经说了,现代os,内存就是一层cache。你可以写个程序malloc 1tb内存,再fork

: 100份试试看。理论上你要用100tb内存,实际上程序照样跑的很欢没任何毛病。

: 所以你只要保证你的物理内存>你实际应用需求就行,不用什么预留内存。这年头malloc

: ...................

957c7d8f6c38a8b19fedbae61190b165.png

i00i

烟灰·独孤求胖

2019-02-13

问题就是被kill不起啊亲,不管是虚机进程还是osd进程被kill,烂摊子都可能不好收拾。

我能做到KVM不超分内存,不过很难算准Linux自身和ceph在高负荷情况下需要多少内存,

而且还可能遇到别的物理节点挂了,HA漂移过来的虚机进程,这笔账算不清楚。

留个4G的swap只是作为缓冲而已,如果将来遇到极端场景崩了,我要么增大swap要么减少虚机,

横竖得再做个调整,好歹有个参考值了。

当然,可能更好的办法是把内存插满。。

e941cc85d79c546ea14ce8087d085a30.gif

【 在 lvsoft 的大作中提到: 】

: 我已经说了,现代os,内存就是一层cache。你可以写个程序malloc 1tb内存,再fork

: 100份试试看。理论上你要用100tb内存,实际上程序照样跑的很欢没任何毛病。

: 所以你只要保证你的物理内存>你实际应用需求就行,不用什么预留内存。这年头malloc

: ...................

957c7d8f6c38a8b19fedbae61190b165.png

i00i

烟灰·独孤求胖

2019-02-13

我想这为了说明“超了也无所谓”,到时哪个进程撞到边界值上allocate出错了,

那就它被kernel kill掉了,而kernel本身不至于崩溃。

【 在 huang10zhi 的大作中提到: 】

: 这100tb不就超过物理内存了吗?

957c7d8f6c38a8b19fedbae61190b165.png

i00i

烟灰·独孤求胖

2019-02-13

然也。

e941cc85d79c546ea14ce8087d085a30.gif

【 在 lvsoft 的大作中提到: 】

: nod,但我相信他不会遇到这个傻x case

957c7d8f6c38a8b19fedbae61190b165.png

i00i

烟灰·独孤求胖

2019-03-07

我重新体会了一下您的观点,决定还是应该听您的把swap禁掉。

实践也表明即便把vm.swappiness设置为0,

Linux也会在“它认为该用”的时候使用swap,即便还有大量物理内存。

“预留”swap对我的场景没有用处,所需物理内存也是完全可以预算的,

我应该预留的是物理内存,真正遇到压力时,最简单省事的做法是加内存条,插满为止。。。

感谢~

【 在 lvsoft 的大作中提到: 】

: 我已经说了,现代os,内存就是一层cache。你可以写个程序malloc 1tb内存,再fork

: 100份试试看。理论上你要用100tb内存,实际上程序照样跑的很欢没任何毛病。

: 所以你只要保证你的物理内存>你实际应用需求就行,不用什么预留内存。这年头malloc

: ...................

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值