linux下的buff/cache内存占用过高-手动清除释放内存

这篇具有很好参考价值的文章主要介绍了linux下的buff/cache内存占用过高-手动清除释放内存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

buff/cache内存占用太高

我们在使用free -h或者(top命令)查看系统内存的时候,有时间会发现buff/cache很高,如下图:

[root@nfs ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           974M        518M         78M         72M        377M        143M
Swap:          2.0G        381M        1.6G

可以看到占用了377M的内存

什么是buff

buff(Buffer Cache)是一种I/O缓存,用于内存和硬盘的缓冲,是io设备的读写缓冲区。

什么是cache

cache(Page Cache)是一种高速缓存,用于CPU和内存之间的缓冲 ,是文件系统的cache。把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。它们都是占用内存。两者都是RAM中的数据。

buff和cache

简单来说,buff是即将要被写入磁盘的,而cache是被从磁盘中读出来的。

手动清除buff/cache

[root@nfs ~]# sync 
[root@nfs ~]# echo 1 > /proc/sys/vm/drop_caches
[root@nfs ~]# echo 2 > /proc/sys/vm/drop_caches
[root@nfs ~]# echo 3 > /proc/sys/vm/drop_caches

注:/proc/sys/vm/drop_caches的值默认为0
说明:
#sync:将所有未写的系统缓冲区写到磁盘中
#echo 1 > /proc/sys/vm/drop_caches:清除page cache
#echo 2 > /proc/sys/vm/drop_caches:清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
#echo 3 > /proc/sys/vm/drop_caches:清除pagecache和slab分配器中的缓存对象。

清除后

[root@nfs ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           974M        518M        211M         72M        244M        181M
Swap:          2.0G        381M        1.6G

查看buff/cache使用率高的进程有哪些

# 下载hcache工具
[root@ceph01 ~]# wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache
# 赋予权限
[root@ceph01 ~]# chmod 777 hcache && mv hcache /usr/local/bin/

全局显示最大的被缓存文件

[root@ceph01 ~]# hcache --top 10
+--------------------------------+----------------+------------+-----------+---------+
| Name                           | Size (bytes)   | Pages      | Cached    | Percent |
|--------------------------------+----------------+------------+-----------+---------|
| /usr/bin/dockerd               | 96792616       | 23632      | 16821     | 071.179 |
| /usr/bin/containerd            | 59580232       | 14546      | 12014     | 082.593 |
| /usr/bin/ceph-osd              | 19758688       | 4824       | 4824      | 100.000 |
| /usr/bin/ceph-mon              | 14452480       | 3529       | 3486      | 098.782 |
| /usr/bin/ceph-mgr              | 10286056       | 2512       | 2451      | 097.572 |
| /etc/udev/hwdb.bin             | 7780559        | 1900       | 958       | 050.421 |
| /usr/lib64/libmozjs-17.0.so    | 4028168        | 984        | 759       | 077.134 |
| /usr/local/bin/hcache          | 2542252        | 621        | 621       | 100.000 |
| /usr/lib64/libcrypto.so.1.0.2k | 2512832        | 614        | 610       | 099.349 |
| /usr/sbin/NetworkManager       | 2776016        | 678        | 603       | 088.938 |
+--------------------------------+----------------+------------+-----------+---------+

查看指定进程所使用的缓存情况

[root@ceph01 ~]# ps -ef | grep docker
root        1157       1  0 09:44 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root        1695    1623  0 09:49 pts/0    00:00:00 grep --color=auto docker
[root@ceph01 ~]# hcache -pid 1157
+--------------------------------------------+----------------+------------+-----------+---------+
| Name                                       | Size (bytes)   | Pages      | Cached    | Percent |
|--------------------------------------------+----------------+------------+-----------+---------|
| /usr/lib64/liblz4.so.1.7.5                 | 85952          | 21         | 21        | 100.000 |
| /usr/lib64/librt-2.17.so                   | 44448          | 11         | 11        | 100.000 |
| /usr/lib64/libm-2.17.so                    | 1139680        | 279        | 202       | 072.401 |
| /usr/lib64/libz.so.1.2.7                   | 90664          | 23         | 23        | 100.000 |
| /usr/lib64/libpcre.so.1.2.0                | 402384         | 99         | 99        | 100.000 |
| /usr/lib64/libresolv-2.17.so               | 106848         | 27         | 27        | 100.000 |
| /var/lib/docker/buildkit/metadata_v2.db    | 16384          | 4          | 4         | 100.000 |
| /usr/lib64/libbz2.so.1.0.6                 | 68192          | 17         | 17        | 100.000 |
| /usr/lib64/libudev.so.1.6.2                | 91256          | 23         | 23        | 100.000 |
| /usr/lib64/liblzma.so.5.2.2                | 157424         | 39         | 39        | 100.000 |
| /usr/lib64/libdl-2.17.so                   | 19776          | 5          | 5         | 100.000 |
| /var/lib/docker/buildkit/snapshots.db      | 16384          | 4          | 4         | 100.000 |
| /usr/lib64/libdw-0.170.so                  | 297360         | 73         | 73        | 100.000 |
| /usr/lib64/libc-2.17.so                    | 2173512        | 531        | 531       | 100.000 |
| /usr/lib64/libpthread-2.17.so              | 144792         | 36         | 36        | 100.000 |
| /usr/lib64/libelf-0.170.so                 | 99944          | 25         | 25        | 100.000 |
| /usr/lib64/libcap.so.2.22                  | 20032          | 5          | 5         | 100.000 |
| /usr/lib64/libnss_files-2.17.so            | 62184          | 16         | 16        | 100.000 |
| /usr/lib64/libgpg-error.so.0.10.0          | 19384          | 5          | 5         | 100.000 |
| /usr/lib64/libgcrypt.so.11.8.2             | 535064         | 131        | 116       | 088.550 |
| /usr/lib64/libselinux.so.1                 | 155744         | 39         | 39        | 100.000 |
| /usr/lib64/libdevmapper.so.1.02            | 356120         | 87         | 87        | 100.000 |
| /usr/lib64/libgcc_s-4.8.5-20150702.so.1    | 88720          | 22         | 22        | 100.000 |
| /var/lib/docker/buildkit/cache.db          | 32768          | 8          | 6         | 075.000 |
| /var/lib/docker/buildkit/containerdmeta.db | 16384          | 4          | 4         | 100.000 |
| /usr/lib64/libsepol.so.1                   | 660208         | 162        | 118       | 072.840 |
| /usr/lib64/libsystemd.so.0.6.0             | 203800         | 50         | 50        | 100.000 |
| /usr/lib64/ld-2.17.so                      | 164240         | 41         | 41        | 100.000 |
| /var/lib/docker/volumes/metadata.db        | 32768          | 8          | 5         | 062.500 |
| /usr/bin/dockerd                           | 96792616       | 23632      | 16870     | 071.386 |
| /usr/lib64/libattr.so.1.1.0                | 19896          | 5          | 5         | 100.000 |
+--------------------------------------------+----------------+------------+-----------+---------+

定位到缓存的最大文件后,然后使用lsof得到当前文件的一些进程信息了文章来源地址https://www.toymoban.com/news/detail-468363.html

[root@ceph01 ~]# lsof /usr/lib64/libc-2.17.so 
COMMAND    PID    USER  FD   TYPE DEVICE SIZE/OFF  NODE NAME
systemd      1    root mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so
systemd-j  497    root mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so
lvmetad    526    root mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so
systemd-u  527    root mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so
auditd     662    root mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so
dbus-daem  686    dbus mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so
systemd-l  689    root mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so
irqbalanc  691    root mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so
polkitd    692 polkitd mem    REG  253,0  2173512 46386 /usr/lib64/libc-2.17.so

到了这里,关于linux下的buff/cache内存占用过高-手动清除释放内存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Linux系列》buff/cache占用太多内存,如何释放内存?

      当遇到很多日志文件时,想要清理部分日志,但是一个一个清理太过麻烦。所以希望通过从文件时间上做逻辑判断,实现把某一时间之前的文件删除。 ll查看所有的日志信息 wc -l统计数量 find查找文件命令 -name指定查找文件的名称 -mtime +n, 查找n天前的文件 -exec 执行脚本固

    2024年02月16日
    浏览(39)
  • Centos 系统内存 buff/cache 占用过多

    查看Centos内存使用情况: free -h 在云服务器上,total = used + free + buff/cache Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,这个操作中主要的内存释放都来自于对buffer/cache的释放。 还可以使用下面这个文件来人工

    2024年02月16日
    浏览(43)
  • Linux清除缓存buff/cache

    使用free -h 查看内存情况发现buff/cache缓存占用太多了 导致我hive都跑不动 原因: buff/cache是由于系统读写导致的文件缓存,没有及时释放 办法:清除缓存 跑这三个命令就可以了 高级办法 这里可以写个脚本来自动定时清除缓存,新建一个脚本 touch cleanBuffCache.sh 给定义的脚本赋

    2023年04月23日
    浏览(75)
  • Linux 定时清理buff/cache

    总所周知,linux系统下的内存一直都不够用,特别是对于一些WEB网站而言,特别是针对一些小型服务器,内存一下子就占满了 通过我们用free -h 查询内存的占用大小时,总会发现buff/cache暂用过大 解决的方法一般可以直接清理 或者定时清理 选择其中一个清理就行了,例如    

    2024年02月09日
    浏览(41)
  • Java内存占用过高问题分析

    这里我们创建一个springboot项目, 然后随便写一个contoller, 在这个controller中定义一个List集合, 然后再初始化的时候让集合中10万个字符串, 然后部署并启动项目(这里为了贴近实战, 我是在centos中启动的项目) 进入系统, 使用top命令显示系统中的进程信息, 然后点击H(大写), 以内存排

    2024年02月09日
    浏览(54)
  • 解决IDEA内存占用过高问题

    往往对于笔记本过电脑内存不够来说的用户,idea占用内存是很高的,打开idea内存直接飙升,因此我做了以下处理。 针对全栈的人来说,项目中的前端依赖包文件过多,因此扫描索引占用内存过高,主要node_modules文件夹导致的 ctrl+alt+s打开设置搜索文件类型 复制粘贴以下配置

    2024年02月04日
    浏览(51)
  • 解决VMware内存占用过高问题

    回顾多年的记录笔记方法,… VMware虚拟机使用时间一段时间后,会出现开启VMware客户机内存占用过高问题。 1、VMware cache缓存区目录占用太大空间。 2、由于VMware是跨平台的虚拟技术,在使用VMware时,VMware会定时的监测电脑的外部硬件接口,如光驱,USB,现在电脑基本没有光

    2024年02月09日
    浏览(47)
  • mysql内存占用过高的问题

    现象:在mysql运行一天之后,发现内存占用量达到总内存的百分之77,且swap被占用百分之50 问题检查如下: 第一步:开启内存使用的监控服务 第二步: 查看正常实例的使用情况 第三步: 查看内存监控表数据 第三步: 查看事件类型下的内存量 问题解决:         当事件的

    2024年02月11日
    浏览(62)
  • 解决mysql启动占用运行内存过高

    方法1(选取于网络,针对自己的服务器没起作用) 修改my.cnf参数: 重启mysql服务。我这里遇到的没解决,不知道其他人能够解决问题,物理 内存300M以及虚拟内存1G依旧,没改善。 方法2:(解决了当前自己遇到的问题) 要关闭 Performance Schema ,5.6默认开启的,该参数主要用

    2024年02月07日
    浏览(50)
  • Linux清理buff/cache的方法

    一、buff/cache是什么? 在Linux系统中,buff/cache是内存中用于缓存文件系统I/O、网络I/O的缓存,如果应用程序需要内存,buff/cache可以根据系统需要释放缓存。buff/cache机制可以优化Linux系统的性能。 buff/cache在系统内存充足的情况下非常有利,可以加快系统I/O操作,但是如果内存

    2024年02月03日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包