https://zhuanlan.zhihu.com/p/136237953

缓存机制(cache)是保证Linux环境下对硬盘/flash操作效率的有效方式。cache建立在内存中,它缓存了硬盘/flash的数据,当脏数据到达一定水限时,再异步地将数据刷入硬盘。这可以加速进程的文件系统访问操作。但是也有风险,当数据未写入硬盘前设备重启,存在数据丢失的风险。

如果缓存相关参数设置得不好,对系统的运行反而会有不良的影响。如果cache过大,当需要把cache中的巨量数据刷入硬盘时,会让系统显得卡顿,甚至无法调度线程。

Linux提供的接口,以支持修改cache容量。

参数说明

cache中脏数据相关参数

sysctl -a | grep dirty可以看到一组相关的内核参数

$ sysctl -a | grep dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 5
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 600
vm.dirty_ratio = 10
vm.dirty_writeback_centisecs = 100
  • vm.dirty_background_bytes:脏数据量达到此门限后,系统会开始把脏数据写入外存。此时脏数据可能仍然继续写入内存。
  • vm.dirty_ratio:脏数据量达到此门限后,系统会阻塞式地将脏数据写入外存,新的数据将被阻塞,无法写入cache。
  • vm.dirty_background_bytes与vm.dirty_bytes:与vm.dirty_background_bytes/vm.dirty_ratio类似,差异仅仅是门限的计数单位,不是内存总量的百分比,而是bytes。注意_ratio与_bytes,有且仅有一个组能生效,如果一组被设置了非0值,另一组就应该被置0。
  • vm.dirty_writeback_centisecs:表示间隔多长时间,系统去检查一次cache中的数据量是否超过门限值,以百分之一秒为单位。
  • vm.dirty_expire_centisecs:表示数据在cache中允许被缓存多长时间。以百分之一秒为单位。

drop cache相关参数与操作

使用top命令,可以查看当前系统中cache的大小。

# top
top - 16:50:19 up 4 days, 7:00, 22 users, load average: 25.06, 24.12, 23.14
Tasks: 493 total, 7 running, 486 sleeping, 0 stopped, 0 zombie
%Cpu(s): 37.1 us, 18.9 sy, 0.0 ni, 42.3 id, 0.0 wa, 0.0 hi, 1.7 si, 0.0 st
KiB Mem : 65622752 total, 30293032 free, 29879144 used, 5450576 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 31415264 avail Mem

使用echo 3 > /proc/sys/vm/drop_caches可以手动清理cache。但这并不是一个好主意。cache有它存在的必要。假设一台网页服务器,在drop_cache之后,所有用户访问的数据都将从硬盘中读出,这会显著地影响用户访问网站的体验。

如果发现cache确实过大,我们应该尽量使用系统提供的参数来调优,不采用主动drop_cache的方式。

  • vm.vfs_cache_pressure:表示系统清理cache的“努力程度”。默认值为100。越大则表示内核会越频繁地回收cache。

参数建议

在一台内存为64G,硬盘读写量长期保持在500KB/s的服务器上,在未调优前,经常发生因系统回收cache导致的系统挂起。因此,我们考虑修改参数,提高flush dirty和cache回收的频率,避免脏数据与cache累积过多,一次性回收导致的系统挂起无响应。

以下参数作参考:

vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 5
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 600
vm.dirty_ratio = 10
vm.dirty_writeback_centisecs = 100
vm.vfs_cache_pressure = 500

[转帖]Linux cache参数调优的更多相关文章

  1. Linux Linux内核参数调优

    Linux内核参数调优 by:授客 QQ:1033553122 关于调优的建议: 1.出错时,可以查看操作系统日志,可能会找到一些有用的信息 2.尽量不要“批量”修改内核参数,笔者就曾这么干过,结果“ ...

  2. Linux内核参数调优

    用法: vim /etc/sysctl.conf #修改内容 sysctl -p #生效 相关参数仅供参考,具体数值还需要根据机器性能,应用场景等实际情况来做更细微调整.   net.core.net ...

  3. LINUX内核参数调优集锦

    1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 1.linux内核参数注释 以下表格中红色字体为常用优化参数 根据参数文件所处目录不同而进行分表整理 下列文件所在目录: ...

  4. linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms

    changing a readonly file (linu single user mode)

  5. (转)linux IO 内核参数调优 之 参数调节和场景分析

    1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总结可知cached中的脏数据满足如下几个条件中一个或者多个的时 ...

  6. Linux内核 TCP/IP、Socket参数调优

    Linux内核 TCP/IP.Socket参数调优 2014-06-06  Harrison....   阅 9611  转 165 转藏到我的图书馆   微信分享:   Doc1: /proc/sy ...

  7. Linux上TCP的几个内核参数调优

    Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优.光TCP的调优参数就有50多个.在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数.在此分享出来,希望对大家 ...

  8. linux 服务器安全加固和内核参数调优 nf_conntrack

    0.内部设置跳板机,服务器只能通过跳板机登录1.禁止ROOT用户远程登录和登录端口 禁止ROOT用户远程登录 .打开 /etc/ssh/sshd_config PermitRootLogin no . ...

  9. MySQL 优化之 Linux系统层面调优

    MySQL 一般运行于Linux系统中.对于MySQL的调优一般分为Linux操作系统层面的调优和MySQL层面的调优(当然还有架构层面.业务层面.应用程序层面的调优).操作系统主要是管理和分配硬件资 ...

  10. 《linux性能及调优指南》 3.5 网络瓶颈

    3.5 Network bottlenecks A performance problem in the network subsystem can be the cause of many prob ...

随机推荐

  1. Python——第一章:语言介绍

    随着Python的语言在世界受欢迎程度持续高涨,如今也成功夺得了第一的宝座. 在计算机领域,没有谁(诺基亚.微软.苹果.亚马逊等等)能永远稳坐第一,随着时间更迭,就会推陈出新,一定会有更好的.更先进的 ...

  2. Java异常处理之数字溢出问题

    在进行 Java 开发时,经常会遇到数字溢出的问题.这个问题在很多程序中都非常常见,尤其是在进行数值计算的时候.Java 中提供了一种异常机制来处理这种情况,我们可以在代码中使用 try-catch ...

  3. tmux 增加历史回滚缓冲区 buffer

    tmux 默认回滚 2000 行,如果要查看更多记录(比如编译报错)可以在.tmux.conf文件中增加一行 set -g history-limit 5000 重启 tmux session 生效

  4. flex布局之美,以后就靠它来布局了

    写在前面 在很久很久以前,网页布局基本上通过table 元素来实现.通过操作table 中单元格的align 和valign可以实现水平垂直居中等 再后来,由于CSS 不断完善,便演变出了:标准文档流 ...

  5. MySQL篇:第五章_详解DDL语言

    DDL语句 库和表的管理 库的管理: 一.创建库 create database 库名 二.删除库 drop database 库名 表的管理: 1.创建表 CREATE TABLE IF NOT E ...

  6. AI开发效率低,你可以试试华为NAIE AutoML

    摘要:为解决AI工程师在开发AI应用场景所遇到的问题,NAIE平台落地AutoML框架(工具)来辅助大家更高效.更迅速解决AI开发问题. 你是不是还在为掌握的AI算法少而烦恼? 你是不是还在为选择某个 ...

  7. DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计

    摘要:介绍在SaaS场景下如何技术选型,SaaS架构设计中关键的技术点等内容. 本文分享自华为云社区<DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计>,作者: 华 ...

  8. 从源码角度详解Java的Callable接口

    摘要:本文从源码角度深入解析Callable接口. 本文分享自华为云社区<深入解析Callable接口>,作者: 冰 河 . 本文纯干货,从源码角度深入解析Callable接口,希望大家踏 ...

  9. Python FastAPI 获取 Neo4j 数据

    前提条件 先往Neo4j 里,准备数据 参考:https://www.cnblogs.com/vipsoft/p/17631347.html#创建传承人 搭建 FastAPI 项目:https://w ...

  10. 大数据-业务数据采集-FlinkCDC 读取 MySQL 数据存入 Kafka

    目录 作用 app 产生各层数据的 flink 任务 bean 数据对象 common 公共常量 utils 工具类 app.ods.FlinkCDC.java package com.atguigu ...