linux 内存使用率_我的内存都去哪里了?| 美创运维日记
在疫情期间,小编不得不待在家中远程办公。但变的是办公方式,不变的是美创运维的7*24小时不间断支持。
这不,一位客户发来了一条消息:
客户:张工,好像我这个数据库服务器的内存使用率有点高啊,你帮我看看?
随即发了个linux环境下的free -g的截图过来:
小编一看,按照这个截图的显示,的确在总共62Gb的内存里,可使用内存只剩1Gb了。但是,我们也可以观察到,cached显示的是55Gb,我们再获取了一下top命令的截图:
那为什么cached的内存使用这么大呢?这样的内存使用情况是正常的吗?
要回答这些问题,我们需要了解一下buffer与cache的含义。buffer 和 cache 是两个在计算机技术中被用滥的名词,放在不同语境下会有不同的意义。我们这里都将其放在linux内存这个语境中解释。
什么是buffer
在 Linux 的内存管理中,这里的buffer 指 Linux 内存的:Buffer cache,中文可以解释为:缓冲区缓存。Buffer cache 主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用。
什么是cache
在Linux的内存管理中,这里的 cache 指 Linux 内存中的:Page cache,中文可以解释为:页面缓存。主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有 read/write 操作的时候。在当前的系统实现里, page cache 也被作为其它文件类型的缓存设备来用,所以事实上 page cache 也负责了大部分的块设备文件的缓存工作。
自动回收 cache机制
Linux 内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,在内存压力较大的情况下, buffer/cache 空间可以被释放,以作为 free 空间分给相关进程使用。
但是由于要回收缓存必须保证 cache 中的数据跟对应文件中的数据一致,才能对 cache 进行释放。所以在回收缓存时一般会造成IO使用较高的现象。因为内核要对比 cache 中的数据和对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收。
所以一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容本来就是为了增加文件以及的读写速度。
人工触发回收cache
除了系统自己触发回收缓存机制外,我们也可以通过下面这个脚本来清理缓存:
1. 查看目前内存使用:
2. 执行sync同步数据,防止数据或操作丢失(重要),将未写的系统缓冲区写到磁盘中。包含已修改的 i-node、已延迟的块 I/O 和读写映射文件
3. 使用/proc/sys/vm/drop_caches 清理cache
4. 查看清理后内存使用情况
可以看到一大部分cached已被回收。
drop_caches详细文档如下:
该文件可以设置的值分别为1、2、3。它们所表示的含义为:
echo 1 > /proc/sys/vm/drop_caches:表示清除 page cache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收 slab 分配器中的对象(包括目录项缓存和 inode 缓存)。slab 分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的 page cache。
echo 3 > /proc/sys/vm/drop_caches:表示清除 page cache 和 slab 分配器中的缓存对象。
(只有内核在2.6.16以上的才支持)
内核版本查看方法如下:
Slab分配器内存:
"Slab"表示内核Slab所占用的内存大小,slab有的可回收有的不可回收,其中可回收的通过"SReclaimable"表示,不可回收的通过"SUnreclaim"表示。
我们可以查看/proc/meminfo获取它的值:
所以一般情况下,人工drop_caches操作是不能回收所有page cache的,它有三块缓存是无法回收的:
1. dirty pages
2. Slab中的不可回收缓存
3. 共享内存和tmpfs,即free命令中的shared部分
在正常的业务数据库系统中,cached较高是一件比较普遍的事情,尽量不要去手动清缓存,毕竟它是为了提高效率而产生的,如果冒然释放缓存会造成IO使用率变高,业务系统的效率也会受影响。
美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。
本文转自杭州美创科技有限公司公众号(新运维新数据),如需二次转载,请咨询marketing@mchz.com.cn。
linux 内存使用率_我的内存都去哪里了?| 美创运维日记相关推荐
- linux oracle 运维_运维日记| Linux磁盘空间被莫名占用的问题
各位新朋友-记得先点蓝字关注我哦- 某天笔者在拷贝一份大日志文件到data目录下时,发现磁盘空间已经满了.经常使用linux的朋友相信对以下这个报错都不陌生:No space left on devi ...
- mysql逻辑读高影响_运维日记| MySQL/Oracle深度解析之一:逻辑读
前言 THE FIRST 比较数据库优劣.异同的文章有很多了,使用压测工具,进行不同压力下的测试,就能大致上比较出来哪种数据库是"最快"的数据库.但从有经验的数据架构.DBA等专业 ...
- mysql 慢日志 逻辑读_运维日记| MySQLOracle深度解析之一:逻辑读
前言 THE FIRST 比较数据库优劣.异同的文章有很多了,使用压测工具,进行不同压力下的测试,就能大致上比较出来哪种数据库是"最快"的数据库.但从有经验的数据架构.DBA等专业 ...
- mysql hash函数_运维日记| MySQL/Oracle深度解析之一:逻辑读
前言 THE FIRST 比较数据库优劣.异同的文章有很多了,使用压测工具,进行不同压力下的测试,就能大致上比较出来哪种数据库是"最快"的数据库.但从有经验的数据架构.DBA等专业 ...
- 运维日记010 - Linux下的链接文件
运维日记010 - Linux下的链接文件 几个基本概念 Linux下的链接文件可以分为硬链接(hard link)与软链接(soft link).要理解它们,必须先要理解几个基本概念. inode ...
- VB.NET工作笔记015---vb.net获取cpu使用率,内存使用率_未能找到具有指定类别名“Processor”、计数器名“% Processor Time”的性能计数
vb.net获取系统CPU的使用率,和内存的使用率 获取cpu的使用率,用: performanceCounter1这个控件,一定要记得,写上Processor 这个: counterName cat ...
- go 是常驻内存吗_图解 Go 内存分配器
原标题:图解 Go 内存分配器 作者 | Ankur Anand 译者 | 闫亮 内存分配器一直是性能优化的重头戏,其结构复杂.内容抽象,涉及的数据结构繁多,相信很多人都曾被它搞疯了.本文将从内存的基 ...
- 操作系统内存管理_操作系统6内存管理基础
引言 花了一段时间才把之前的笔记整理了一部分,平时太忙也没啥时间.今天开始整理内存管理部分的,内存管理部分大致分为三部分笔记,第一部分就是本篇内存管理基础,第二部分是虚拟内存,第三部分高速缓存. 一个 ...
- jstat 内存泄漏_基于Java内存dump文件分析解决内存泄漏问题
概述 本文介绍一次解决现场java内存泄漏问题的经过,希望能提供后续遇到类似情况的读者一点思路. 生产环境发现的问题问题 生产环境运维人员反馈,服务器(windows系统)卡死,相关的服务都运行异常, ...
最新文章
- PyTorch 重磅更新,不只是支持 Windows
- 《每周CV论文》人脸识别难题:遮挡年龄姿态妆造亲属伪造攻击
- Git将主合并到功能分支
- 删除不再位于远程的跟踪分支
- Win8Beta即将发布,业内普遍看好微软Windows 8
- Mysql数据库主从及主主复制配置演示
- 提高IT运维综合管理能力,实现业务服务管理
- 对于WIFI版ipad(无GPS芯片)定位功能的释疑
- 苹果史诗级硬件漏洞 iOS 可永久越狱并且无法修复
- 浅谈如何搭建知识体系
- 【ACM】nyoj_139_我排第几个_201308062046
- mysql介质故障_pciessd异常readonly致mysql反复crash
- 22.使用非阻塞IO 1
- J2EE项目中异常处理
- EditPlus中文版 安装教程
- 【DP专题】LintCode刷题笔记
- UTF-8转GBK(GBK转UTF-8)
- 自定义tensorflow的tf.image.resize_bicubic方法
- mips指令简单入门
- 163的邮箱怎么注册?163的邮箱格式怎么填写?
热门文章
- javascript 应用_如何利用JavaScript的功能使您的应用脱机工作
- 在Unterfranken中搜索河流:如何使用Elasticsearch在地图上查找要素
- js/d3.min.js_在5分钟内学习D3.js
- mac安装go语言环境
- ubuntu16.04无法用网页播放音乐
- 5个趣味Python练手项目
- dhtmlxTree 10分钟做一个树
- python end用法在固定位置换行_在Python中链接方法时,换行的样式正确
- python kmeans聚类_python机器学习之k-means聚类算法(1)
- 【计算机网络】—— 停止-等待协议