linux内存管理的主要概念是虚拟内存,你知道linux内存管理基础及方法?

描述

一、基本概念

(1)物理内存和虚拟内存

物理内存:系统硬件提供的真实物理内存

虚拟内存:利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为swap,swap类似于windows的虚拟内存。

9e01572aa5e00074ebeb1a885a0fe71d.png

1、linux的内存管理采取的分页存取机制,会将内存中不经常使用的数据块交换到虚拟内存中。linux会不时地进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事需要内存,linux也会交换出暂时不用的内存页面。

(2)buddy内存分配

linux内核中引入的伙伴系统算法,将空闲页框分为11个块链表:1、2、4、8、16、32、64、128、256、512、1024个连续的页框块,每个页框为4K。比如,当申请100K的空间时,会先在大于100/4=25的页框中寻找,释放后,会将相邻的页框合并。但是频繁的申请和释放,会导致已分配页框的内存块中分散了很多小块的空闲页框。

(3)slab内存分配

针对经常分配/释放的对象,如进程描述符等,在用伙伴系统进行分配释放时会造成大量的内存碎片,处理速度也慢。而slab是基于对象管理的,每当申请时,就从slab列表中分配一个出去,释放时,也是释放到slab表中,而不是返回给伙伴系统,从而避免碎片化(也就是直接在内存中进行)。

查看slab信息的命令是slabtop,其是读取/proc/slabinfo中的信息

(4)页存大小

linux支持大页内存技术hugepage,从而减少TLB miss(Translation lookaside buffer 页表寄存器缓冲)。一般来讲,使用较小的页存可以减少碎片化,但是会导致进程的页表过长、降低页面换进换出的效率。

可以在/proc/meminfo中查看大页内存相关信息(HugePages*)

也可通过echo 2000 > /proc/sys/vm/nr_hugepages生效。

二、内存查看:

[plain] view plain copy

[root@localhost Desktop]# free -m

total        used        free      shared  buff/cache   available

Mem:          977         690         71         3        215       111

Swap:          2047        150        1897

(1) 其中含义:

mem:物理内存(第二行显示)

swap:交换区内存(第三行显示)

total:总的物理内存大小977,总的交换内存2047

used:已经使用的

free:空闲的

shared:多个进程共享的内存

buff/cache:磁盘缓存的大小

buffer是为了解决写磁盘的效率

cache是为了解决读磁盘的效率

available:可用的

关系:total = used + free +Buffers/cached

这里重点描述一下free和available的区别:

free = 当前空闲的物理内存

available = free + Buffers/cached - 不可回收的

参见:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773

/proc/meminfo: provide estimated available memory

Many load balancing and workload placing programs check /proc/meminfo to estimate how much free memory is available. They generally do this by adding up "free" and "cached", which was fine ten years ago, but is pretty much guaranteed to be wrong today. It is wrong because Cached includes memory that is not freeable as page cache, for example shared memory segments, tmpfs, and ramfs, and it does not include reclaimable slab memory, which can take up a large fraction of system memory on mostly idle systems with lots of files.

(2) free命令查询的结果是/proc/meminfo中的信息,也可以用cat查看具体的meminfo中的内存。

三、内存释放和扩容:

(1) 内存释放:

在linux中,buffer和cached主要是用于缓存已打开的文件、目录信息、inode等,频繁的文件访问,会导致cache使用的增加,使用free的大小减少。

命令1:sync,将缓存(即buffer)中的待写入磁盘的内容立即写入到磁盘中

命令2:清空/proc/sys/vm/drop_caches中的内容

(详情参见:https://www.kernel.org/doc/Documentation/sysctl/vm.txt)

cache中文件包括page cache和buffer cache两种,前者用于文件、inode等操作,后者用于块设备操作

/proc/sys/vm/下的文件包括虚拟内存的管理,以及脏数据写入磁盘。

To free pagecache(页面内存):

[plain] view plain copy

echo 1 > /proc/sys/vm/drop_caches

To free reclaimable slab objects (includes dentries and inodes)(索引节点链接):

echo 2 > /proc/sys/vm/drop_caches

To free slab objects and pagecache:

echo 3 > /proc/sys/vm/drop_caches

不过还是建议使用:

sysctl -w vm.vfs_cache_pressure=200

因为直接使用echo会太暴力。

(2) 内存扩容:

实际上,并不是对物理内存扩容,而是增加swap交换分区,间接的增加内存,因为swap分区会存放内存溢出的、使用频次较低的数据:

[plain] view plain copy

[root@localhost Desktop]# free -m

total        used        free      shared  buff/cache   available

Mem:            977         419          62           3         495         390

Swap:          2047         160        1887

[root@localhost Desktop]# dd if=/dev/zero of=/home/swap bs=1024 count=512000    # 创建一个块

512000+0 records in

512000+0 records out

524288000 bytes (524 MB) copied, 2.83537 s, 185 MB/s

[root@localhost Desktop]# du /home/swap -sh

500M    /home/swap

[root@localhost Desktop]# mkswap /home/swap # 变为swap分区

Setting up swapspace version 1, size = 511996 KiB

no label, UUID=b10175fc-d933-43ee-8979-a1d466fea54f

[root@localhost Desktop]# /sbin/swapon /home/swap   # 使其生效

swapon: /home/swap: insecure permissions 0644, 0600 suggested.

[root@localhost Desktop]# free -m

total        used        free      shared  buff/cache   available

Mem:            977         420          71           3         485         389

Swap:          2547         160        2387

很明显,可以看到swap分区变大了。

打开APP精彩内容

点击阅读全文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R plot图片背景设置为透明_R语言入门第十二讲:基础绘图(二)------plot与par函数(1)...

上一次给大家简单展示了plot函数的用法,以及par函数的使用。今天我们继续应用这两个函数,看看它的其他功能。下面这个图是数据的一部分[1]。我一直认为,作图简单,但关键是要知道数据在数据库中的格式,才能更好的应用到…

qqkey获取原理_【逆向】QQkey盗号木马原理分析

一、简介QQkey是一段字符串,通过这段字符串在没有QQ登录密码的前提下你依然能够在浏览器中对别人QQ空间、邮箱等应用进行随意访问和操作。现在市面上已经有很多使用易语言编写的盗号木马,专门盗取别人的QQkey,通过QQkey改绑关联了该邮箱的Ste…

visual studio 2015 搭建python开发环境,python入门到精通[三]

在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo,这里略带一句,其实就"学习python"而言,比较建议使用pycharm,pychar…

linux 用脚本建分区,脚本创建磁盘分区

首先最好添加一个空白的磁盘,以免对原数据产生破坏,若果不想添加磁盘也可以,用一个里面数据无关紧要的磁盘,当然前提是必须要对该磁盘内已有的分区进行清空,方法后面第三步会有1.先看脚本内容:[rootlocalho…

如何给打印机墨盒加墨

今天打印东西突然遇到问题了,显示墨盒黑色没墨了,网上一搜,整套的墨盒大几十,随手换了一个关键词 墨盒墨水 这下不到十块钱解决,正好锻炼下自己的动手能力(其实就是穷嘛。。。) 接下来就分享下动…

三轴加速度传感器和六轴惯性传感器_六轴传感器和三轴传感器的区别

六轴传感器和三轴传感器的区别重力重力传感器就是利用了其内部的由于加速度造成的晶体变形这个特性。由于这个变形会产生电压,只要计算出产生电压和所施加的加速度之间的关系,就可以将加速度转化成电压输出。当然,还有很多其它方法来制作加速…

全局莫兰指数_空间自相关 | 莫兰指数

空间自相关:是指一些变量在同一个分布区内的观测数据之间潜在的相互依赖性。其中,自相关中的“自”表示当你进行相关性观察统计量,是来源于不同对象的同一属性。Tobler(1970)曾指出“地理学第一定律:任何东西与别的东西之间都是相…

宏函数和函数的区别

转载自: http://www.ccidnet.com/2010/0709/2110463.shtml 1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型. 2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值…

linux vi 排序命令,10 个你必须掌握的超酷 VI 命令技巧

摘要:大部分Linux开发者对vi命相当熟悉,可是遗憾的是,大部分开发者都只能掌握一些最常用的Linux vi命令,下面介绍的10个vi命令虽然很多不为人知,但是在实际应用中又能让你大大提高效率。在使用vi 编辑器时—无论是初次…

python微信机器人部署服务器_玩法收藏/云服务器/零基础微信机器人实践( Python )...

最近想做个微信机器人,主要是为了个人方便。在腾云阁发现这个教程,得到了一些启发。(修改转载已取得腾讯云授权)技术路径和实现思路首先编程语言使用了 Python , Python 语法简洁、第三方扩展丰富,也因为这里采用的微信消息框架 i…

arduino 水位传感器_云南可信赖的威卡压力传感器哪里有

云南可信赖的威卡压力传感器哪里有 k52gh264云南可信赖的威卡压力传感器哪里有 在生产生活中,对压力表的正确使用为工业生产提供了一定程度的便利。.指针转动受阻在检修过程中,先给弹賛管式压力表施加压力,如果发现被检测表的指针成比例变快或…

小甲鱼Python笔记(下)

二十八 二十九 文件 打开文件 open(文件名[,模式][,缓冲])  注意open是个函数不是方法 模式: 缓冲: 大于1的数字代表缓冲区的大小(单位是字节),-1(或者是任何负数)代表使用默认缓冲区大小 只…

linux内核编译后 make: 警告:检测到时钟错误.,系统时钟 make: 警告:检测到时钟错误。您的创建可能是不完整的。...

修改Linux的时间修改Linux时间一般涉及到3个命令: date, clock, hwclockdate: 修改系统当前的时间:[root]#date –s ‘2005/12/5 10:01:00系统当前的时间改成2005年12月5日,10点01分这个修改在系统重启后就…

linux服务器搭建_学linux可以做什么具体的就业方向是什么

学linux可以做什么当今世界流行的操作系统有3大类,Linux、Mac OS和Windows操作系统,Linux操作系统因其开源、免费、跨平台、良好的界面等特性,深受广大程序员们的青睐!Linux操作系统被广泛的应用于企业服务器领域,目前…

vue 给iframe设置src_vue组件中使用iframe元素

需要在本页面中展示vue组件中的超链接,地址栏不改变的方法:GoBack{{item.name}}export default {name: hello,data () {return {iframeState:false,goBackState:false,webAddress: [{name:segmentFault,link:https://segmentfault.com/a/1190000004502619},{name:博…

iOS coredata 避免添加重复数据

首先你要知道你数据中那一项是唯一的 然后对这个唯一进行现查后插的顺序进行处理 在查的时候 第一次array肯定是空的 判断array的内容为0的话先插入第一次数据 然后再做唯一那个参数是否存在 不在的话则插入数据 这样就可以避免重复数据了 就是一个逻辑的问题 之前没想通 然后今…

linux下安装两个tomcat,linux安装两个tomcat-Go语言中文社区

解压apache-tomcat-7.0.86.tar.gz,把解压后的复制一份修改/etc/profile文件:vim /etc/profile#################我添加的start######################################first tomcat######################CATALINA_BASE/root/app/apache-tomcat-7.0.86CA…

python中sn的意思_python获取内存SN编号等信息

物理机内存检查,#!/usr/bin/env python# -*-coding:UTF-8 -*-import osmemdict dict()memditail dict()#os.popen()os.system( dmidecode -t memory >./mem.txt )memstros.popen(cat ./mem.txt)mem_countos.popen("cat ./mem.txt |grep Number Of Devic…

中文域名销售平台_中国开关网.商城被搭建为南京某公司官网,这样的域名你喜欢吗?...

南京盛企电子有限公司是一个民营企业,成立于1997年6月,主要生产led广告板、薄膜开关、薄膜面板及其相类似的产品。公司拥有国内先进的制版系统、精细的丝网晒版设备、世界先进的丝网印刷机、数控恒温远红外烘道、uv固化机、模切机、激光切割机、电子产品…

linux远程虚拟桌面,2020-07-23 Linux 远程连接虚拟桌面

写在前面我的服务器为Centos7,其他 Linux 发行版可能略有差异。此方法不需要有物理显示屏。可以多用户同时登录,同一用户可以开启多个虚拟桌面。TigerVNC 安装使用这个软件提供 VNC 服务。Centos 下安装sudo yum install -y tigervnc-server用户模式开启…