20240518解决在编译RK3588平台时内存buff占用过大的问题

sudo sh -c 'sync && echo 3 > /proc/sys/vm/drop_caches'
sudo echo 3 | sudo tee /proc/sys/vm/drop_caches
free -h
top


20240518解决在编译RK3588平台时内存buff占用过大的问题
2024/5/18 17:29


缘起:在服务器编译Android10/12的时候,在top中,经常发现buff/cache占用率过高/几乎占用全部的物理内存。
由于在处理SDK之后:从WIN10的分区COPY整个SDK到Ubuntu20.04的EXT4分区,然后通过tar解压缩SDK。
拿掉/clean一些不用的文件,然后用tar再重新打包。

等SDK清理完成之后,你100%就会发现物理内存占用率刷刷地往上冲了!
有可能造成编译Android10/12中断。【接着继续编译有效!】


百度:ubuntu内存占用高
ubuntu buff/cache高
-bash: /proc/sys/vm/drop_caches: Permission denie

https://blog.csdn.net/Eazon_chan/article/details/109853896
Ubuntu 20.04缓存占用过高
Kareza 于 2020-11-20 16:44:10 发布

在进行IO密集型的工作之后,容易引起机器缓存过高,影响程序运行性能。

操作系统有被动的机制可以进行自动清理,但很消极。

可以通过以下指令进行主动清理

清除pagecache
echo 1 > /proc/sys/vm/drop_caches

清除回收slab分配器中的对象(包括目录项缓存和inode缓存),slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用pagecache
echo 2 > /proc/sys/vm/drop_caches

清楚pagecache和slab分配器中的缓存对象
echo 3 > /proc/sys/vm/drop_caches
 

如果条件允许的话,更彻底的清理方式是重启。
sudo reboot

https://blog.csdn.net/m0_37886429/article/details/101211206
sudo执行echo命令Permission denied

7*24 工作者 于 2019-09-23 16:36:22 发布

问题: 使用sudo执行echo命令,报权限拒绝

$ sudo echo 3 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: Permission denied
1
2
这时,可以看到 bash 拒绝这么做,说是权限不够。这是因为重定向符号 “>” 和 “>>” 也是 bash 的命令。我们使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 “>>” 命令也具有 root 权限,所以 bash 会认为这两个命令都没有像 /proc/sys/vm/drop_caches 文件写入信息的权限。

解决方法:
方式一:
利用 “sh -c” 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:

$ sudo sh -c 'sync && echo 3 > /proc/sys/vm/drop_caches'
1
方式二:
利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,具体用法如下:

$ echo 3 | sudo tee /proc/sys/vm/drop_caches
1
备注: tee 命令的 “-a” 选项的作用等同于 “>>” 命令,如果去除该选项,那么 tee 命令的作用就等同于 “>” 命令。

扩展:

##查看服务器上tcp连接
$ netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

参考资料:
https://blog.csdn.net/han0373/article/details/122204909
解决buff/cache占用过大


https://blog.csdn.net/dl1456074580/article/details/134825243
linux缓冲区(buff/cache)内存占用过高解决办法
3.安装hcache查看谁在占用


https://blog.csdn.net/zwjzwj108108/article/details/127199129
Ubuntu中buff/cache内存占用过高解决办法(卡顿,死机的原因)


https://blog.51cto.com/u_14354846/2437290
buff/cache内存缓存过大,设置定时清理


https://blog.51cto.com/u_15069450/4074468
Linux 服务器buff/cache清理


https://blog.csdn.net/hechaojie_com/article/details/82782880
ubuntu下buff/cache占用过大处理


【可以实战/实操】
https://ssoor.github.io/2020/03/25/linux-buffer-cache/
为什么 Linux buffer/cache 内存占用很高?具体原因以及解决办法

怎么回收 buff/cache?
Linux 内核会在内存将要耗尽的时候,自动触发内存回收的工作,以便释放出内存给急需内存的进程使用。

但是这种回收的工作也并不是没有成本。

理解 cache 是干什么的就知道,cache 中存在着一部分 write 操作的数据。所以必须保证 cache 中的数据跟对应文件中的数据一致,才能对 cache 进行释放。

于是伴随着 cache 清除的行为的,一般都是系统 IO 飙高。这是因为内核要将 cache 中缓存的 write 数据进行回写。

我们可以使用下面这个文件来人工触发缓存清除的操作,Linux 提供了三种清空方式:

echo 1 > /proc/sys/vm/drop_caches # 仅清除页面缓存
echo 2 > /proc/sys/vm/drop_caches # 清除目录项和 inode
echo 3 > /proc/sys/vm/drop_caches # 清除页面缓存、目录项以及 inode
但是这种放时只能在执行的当时起作用,过一段时间之后又会发现内存被占满,怎么办呢?

实际上内核提供了 vm.vfs_cache_pressure 参数用来控制缓冲区的回收频率,我们可以调整它。

这个参数是用来控制内核回收 VFS 缓存的频率。修改这个值会提高或者降低回收 VFS 缓存的频率。值可以设置为 0-200 中的任意值。越大回收频率越快,可以把 vm.vfs_cache_pressure 赋值为 200 来获得最快的回收频率。这个值默认值一般为 100。

另外也可以使用 slabtop 分析内存使用情况。一般情况下,dentry 和 *_inode_cache 值越高回收的效果越好。

为什么是 dentry 和 *_inode_cache 呢,这是因为当读写文件时内核会为该文件对象建立一个 dentry,并将其缓存起来,方便下一次读写时直接从内存中取出提高效率。至于 *_inode_cache 我就不是很清楚了,只知道是为了加快对索引节点的索引,如果有清楚的可以告诉我一下。


BING:ubuntu下buff/cache占用过大处理

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值