LINUX中内存缓存占比优化参考

这篇具有很好参考价值的文章主要介绍了LINUX中内存缓存占比优化参考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

    在日常使用过程中,我们使用free查看系统内存使用率情况时,经常可以发现cache被使用的比较大,这种现象其实是linux内核的高速IO处理机制,在RHEL 4,5,6,7操作系统中,页高速缓存是动态调整的, 并没有特定的内核参数可以直接调整其大小;然而,通过调整虚拟内存的一些参数,可以间接影响页告诉缓存的大小。本文主要对影响cache的这些参数进行介绍和优化推荐。

二、参数介绍

通过调整sysctl中的一些参数来控制页高速缓存的大小:

  • vm.vfs_cache_pressure (默认值 = 100)
    • 默认值vfs_cache_pressure=100,在回收页高速缓存(page cache)和交换缓存(swap cache)时,内核会以"相对公平"的比例回收dentries和inodes。
    • 调整内核更趋向于回收内存中保存的目录项缓存(dentry)和索引节点对象 (inode objects)。
    • 减少vfs_cache_pressure值,会使内核更倾向于保留目录项对象(dentry)以及索引节点缓存(inode caches); 增加vfs_cache_pressure 超过100 会使内核更倾向于释放目录项对象(dentry)以及索引节点缓存(inode caches)。
    • 可以通过增加vfs_cache_pressure的值,来使内核更倾向于释放上述缓存,从而限制页高速缓存(page cache)的大小。
  • vm.dirty_background_ratio (默认值 = 10)
    • 此参数的值代表脏页占总内存的百分比, 当系统中脏页数量达到此值时,内核线程pdflush开始把脏页数据写入存储。
    • 可以通过减少此值,来使pdflush进程更早把脏页写入存储,从而限制页高速缓存的大小。
  • vm.dirty_ratio (默认值 = 20)
    • 这个参数则指定了当文件系统缓存脏页数量达到系统内存百分之多少时(默认值20%),系统不得不开始处理缓存脏页(因为此时脏页数量已经比较多,为了避免数据丢失需要将一定脏页刷入外部存储);在此过程中很多应用进程可能会因为系统转而处理文件IO而阻塞。
    • 减少此值可使 系统更早来处理内存中的脏页,从而限制页高速缓存的大小。
  • vm.dirty_writeback_centisecs (Red Hat Enterprise Linux 4 & 5: 默认值 = 499, Red Hat Enterprise Linux 6 and 7: 默认值 = 500)
    • pdflush进程会定时被唤醒,把脏页中的数据写入硬盘。单位是 1/100 秒。缺省数值是500,也就是pdflush进程5秒钟会被唤醒一次。
    • 减少此值可以更频繁的唤醒pdflush进程来处理脏页, 从而限制页高速缓存的大小。
  • vm.dirty_expire_centisecs (Red Hat Enterprise Linux 4 and 5: 默认值= 2999, Red Hat Enterprise Linux 6 and 7: 默认值 = 3000)
    • 这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,被唤醒的pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,pdflush进程被唤醒后,将会把“旧”的数据写入磁盘。
    • 减少此值意味着脏页会更快变“旧”,并被pdflush进程写入磁盘,从而限制页高速缓存的大小。
  • vm.swappiness (RHEL 5 and 6:默认值 = 60, RHEL 7:默认值 = 30)
    • 此参数控制内核是否更趋向于交换非活动内存页页至交换分区(此值越高,代表非活动内存页越可能被交换至交换分区)。
    • 减少此值使内核更倾向于保持非活动内存页在物理内存中,从而释放页高速缓存中的页, 从而限制页高速缓存的大小。

三、场景参考

场景一:Oracle数据库和TT数据库主机

开启hugepage大页,使热数据常驻内存,不占用cache空间

参数

默认值

建议值

vm.dirty_background_bytes

0

vm.dirty_background_ratio

10

3

vm.dirty_bytes

0

vm.dirty_ratio

20

vm.dirty_expire_centisecs

3000

vm.dirty_writeback_centisecs

500

vm.swappiness

30

10

场景二:redis、memcache等菲关系型内存数据库

对cache依赖较大,一般尽量减少数据刷

参数

默认值

建议值

vm.dirty_background_bytes

0

vm.dirty_background_ratio

10

50

vm.dirty_bytes

0

vm.dirty_ratio

20

50

vm.dirty_expire_centisecs

3000

vm.dirty_writeback_centisecs

500

360000

vm.swappiness

30

10

场景三:对数据文件读写频繁的应用

参数

默认值

建议值

vm.dirty_background_bytes

0

vm.dirty_background_ratio

10

50

vm.dirty_bytes

0

vm.dirty_ratio

20

80

vm.dirty_expire_centisecs

3000

vm.dirty_writeback_centisecs

500

vm.swappiness

30

10

场景四:对数据文件读写不频繁的应用

参数

默认值

建议值

vm.dirty_background_bytes

0

vm.dirty_background_ratio

10

5

vm.dirty_bytes

0

vm.dirty_ratio

20

10

vm.dirty_expire_centisecs

3000

vm.dirty_writeback_centisecs

500

vm.swappiness

30

10

场景五:分布式消息中间件

参数

默认值

建议值

vm.dirty_background_bytes

0

vm.dirty_background_ratio

10

50

vm.dirty_bytes

0

vm.dirty_ratio

20

50

vm.dirty_expire_centisecs

3000

vm.dirty_writeback_centisecs

500

360000

vm.swappiness

30

1文章来源地址https://www.toymoban.com/news/detail-821937.html

到了这里,关于LINUX中内存缓存占比优化参考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 如何在 Linux 中清空缓冲区和缓存内存?

    在 Linux 系统中,缓冲区和缓存内存起着重要的作用,用于提高系统性能和优化磁盘访问。然而,有时候我们可能需要清空缓冲区和缓存内存,以释放系统资源或解决某些性能问题。本文将详细介绍如何在 Linux 中清空缓冲区和缓存内存,并提供一些实际的示例。 在深入讨论如

    2024年02月06日
    浏览(69)
  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(65)
  • linux 性能优化-内存优化

    CPU 管理一样,内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应 用程序的指令、数据、缓存等。 1.1.1.日常生活常说的内存是什么? 我的笔记本电脑内存就是 8GB 的 这个内存其实是物理内存 物理内存也称为主存,大多数计算机用的主存都是动态随机访问内

    2024年02月04日
    浏览(53)
  • Jtti:Linux内存管理中的slab缓存怎么实现

    在Linux内存管理中,slab缓存是一种高效的内存分配机制,用于管理小型对象的内存分配。slab缓存的实现是通过SLAB分配器来完成的,它在Linux内核中对内存分配进行优化。 SLAB分配器将内存分为三个区域:slab、partial、和empty。 Slab区域: Slab区域用于保存完整的内存对象。当有

    2024年02月15日
    浏览(46)
  • linux性能优化-内存原理

    只有内核才可以直接访问物理内存,Linux内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程通过访问虚拟内存来访问内存。 虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(也就是单个 CPU 指令可以处理数据的最

    2024年02月01日
    浏览(35)
  • Linux性能优化--性能工具:系统内存

    本章概述了系统级的Linux内存性能工具。本章将讨论这些工具可以测量的内存统计信息,以及如何使用各种工具收集这些统计结果。阅读本章后,你将能够: 理解系统级性能的基本指标,包括内存的使用情况。 明白哪些工具可以检索这些系统级性能指标。 每一种系统级Linu

    2024年02月07日
    浏览(38)
  • Linux性能优化--性能工具:特定进程内存

    本章介绍的工具使你能诊断应用程序与内存子系统之间的交互,该子系统由Linux内核和CPU管理。由于内存子系统的不同层次在性能上有数量级的差异,因此,修复应用程序使其有效地使用内存子系统会对程序性能产生巨大的影响。 阅读本章后,你将能够: 确定一个应用程序使

    2024年02月07日
    浏览(45)
  • Linux内核源码分析 (6)RCU机制及内存优化屏障

    问题: RCU 英文全称为 Read-Copy-Update ,顾名思义就是 读-拷贝-更新 ,是 Linux 内核中重要的同步机制。 Linux 内核已有原子操作、读写信号量等锁机制,为什么要单独设计一个比较复杂的新机制? RCU的原理 RCU记录所有指向共享数据的指针的使用者,当要修改该共享数据时,首先

    2024年02月10日
    浏览(55)
  • Linux查询java服务占用的内存

     使用top命令可以查询 使用jps -l 可以查询jar包名称和PID  

    2024年02月14日
    浏览(43)
  • 解决IDEA内存占比过高问题

    idea内存占比过高,调整GC算法运行配置 打开idea =帮助=编辑自定义VM选项=将下面的配置复制进去 注:更改之后idea内存会慢慢慢慢慢慢慢慢慢慢慢慢往上增加,用电脑管家、360加速球这种清理内存的加速一下,就能清理idea内存,ide内存会从0MB开始,告别卡顿。

    2024年02月13日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包