linux内存-内存回收
一、什么时候回收内存?
1、直接内存回收
有新的大块内存分配请求,但是剩余内存不足。这个时候系统就需要回收一部分内存,进而尽可能地满足新内存请求。
2、定期扫描回收(kswapd)
操作系统内核线程kswapd定期进行回收内存,并通过设定三个内存阈值来衡量内存的使用情况,分别是
- 页最小阈值(pages_min)
- 页低阈值(pages_low)
- 页高阈值(pages_high)
kswapd定期扫描内存的使用情况,并根据剩余内存落在这三个阈值的空间位置,进行内存的回收操作。
1)free < pages_min:说明进程可用内存都耗尽了,触发直接内存回收,此时只有内核才可以分配内存
2)pages_min<free<pages_low:说明内存压力比较大,剩余内存不多了。这时 kswapd会执行内存回收,直到剩余内存大于高阈值为止。
3)pages_low<free<pages_high:说明内存有一定压力,但还可以满足新内存请求。
4)free>pages_high:说明剩余内存比较多,没有内存压力。
二、回收的方式
1、对于缓存和缓冲区的内存回收
1)对文件页的回收,直接回收缓存
2)对脏页的回收,写回磁盘后再回收。
2、基于 Swap 机制,回收不常访问的匿名页(应用程序动态分配的堆内存),通过 Swap 机制,把它们写入磁盘后再释放内存。
3、oom机制进行回收
三、相关参数调整
1、内核参数vm.swappiness,决定回收缓存或swap机制回收内存的倾向
取值范围是 0-100,
数值越大,越积极使用 Swap,也就是更倾向于回收匿名页;
数值越小,越消极使用 Swap,也就是更倾向于回收文件页。
0不代表不使用swap,当剩余内存 + 文件页小于页高阈值时,还是会发生 Swap。
2、内核参数vm.min_free_kbytes,调整内存水位
pages_min = min_free_kbytes换算为page单位,
pages_low = pages_min*5/4
pages_high = pages_min*3/2
3、oom机制
1)vm.panic_on_oom:
- 0:当内存耗尽时,内核会触发OOM killer杀掉最耗内存的进程。
- 1:表示关闭此功能,内核直接panic
2)vm.oom_kill_allocating_task
- 0:内核检查每个进程的分数,分数最高的进程将被kill掉
- 1:内核将kill掉当前申请内存的进程
linux内存-内存回收相关推荐
- linux kernel内存回收机制
http://www.wowotech.net/linux_kenrel/233.html 无论计算机上有多少内存都是不够的,因而linux kernel需要回收一些很少使用的内存页面来保证系统持续有 ...
- Problem 64 如何设置Linux系统内存回收的阀值?
Problem 64 如何设置Linux系统内存回收的阀值? Ans: Linux内核的策略是最大程度的利用内存cache 文件系统的数据,提高IO速度,虽然在机制上是有进程需要更大的内存时,会自动释 ...
- 【Linux 内核 内存管理】物理分配页 ⑧ ( __alloc_pages_slowpath 慢速路径调用函数源码分析 | 获取首选内存区域 | 异步回收内存页 | 最低水线也分配 | 直接分配 )
文章目录 一.获取首选内存区域 二.异步回收内存页 三.最低水线也分配 四.直接分配内存 在 [Linux 内核 内存管理]物理分配页 ② ( __alloc_pages_nodemask 函数参数分 ...
- Linux内存管理回收机制
Linux内存管理回收机制 1.Linux内存管理简介 Linux将所管理的内存划分为内存节点(node).内存分区(zone)和页框(page). 1.1.内存节点(node) 依据 ...
- Linux的内存回收和交换
前言 Linux的swap相关部分代码从2.6早期版本到现在的4.6版本在细节之处已经有不少变化.本文讨论的swap基于Linux 4.4内核代码.Linux内存管理是一套非常复杂的系统,而swap只 ...
- linux回收内存的方法,linux释放内存的方法
Linux 释放内存方法 先看看内存使用状况 [root@node1 ~]# free -m total used free shared buffers cached Mem: 8004 6557 ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏 ...
- 转:浅谈Linux的内存管理机制
一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概 ...
- JVM 与 Linux 的内存关系详解
来源:美团技术团队 在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m. ...
最新文章
- JDK8:使用Optional进行变量判空、集合遍历
- 恢复Oracle误删数据一点小记
- 龙门吊matlab,龙门吊车重物防摆双闭环PID控制设计.doc
- 【原创视频】Docker总体架构设计及各模块原理剖析
- web性能压测——webbench
- python抓取贴吧_python抓取百度贴吧-校花吧,网页图片
- mysql df_DF学Mysql(一)——数据库基本操作
- Unitest框架的使用(一)准备工作,接口定义和Unittest方法
- 程序人生,程序猿要把编程一直学习下去吗?
- 【LeetCode-面试算法经典-Java实现】【012-Integer to Roman(数字转罗马字符)】
- 尚学堂高淇python课件代码_尚学堂高淇Python400集全套视频教程百度云网盘分享
- 计算机视觉目标检测算法综述
- 仓央嘉措---不负如来不负卿---问佛--见与不见
- CSAPP:第四章——处理器体系结构(上)
- 电动汽车热管理粘合剂和密封剂市场现状及未来发展趋势
- facebook第三方登录前后端分离
- 互联网寒冬!docker安装nacos集群
- Neuron:自动优化TMS线圈放置,实现个性化靶向功能网络刺激
- java网络编程的三要素
- JDK8 超详细,肝
热门文章
- 现在最好玩的AI竟然来自一个家谱公司???
- Microsoft SQL Server Management Studio附加数据库时出错。有关详细信息,请单击“消息”列中的超链接。
- 简单区分快速格式化和格式化
- hdu6740 MUV LUV EXTRA KMP算法
- java 操作 User32 的一次小尝试
- iframe 传递参数问题
- OpenGL粒子系统详解及编程实现
- c语言textout字体大小,textout函数怎么用
- SSL漏洞 TLS/SSL Sweet32 attack || TLS/SSL Wrak Cipher Suites[解决]
- O-C和C的差别以及其自身的特点