你知道linux内存管理基础及方法?

 一、基本概念

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

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

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

 你知道linux内存管理基础及方法?_设计制作_MEMS/传感技术

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     mi   ss(Transla     ti   on lookaside buffer 页表     寄存器   缓冲)。一般来讲,使用较小的页存可以减少碎片化,但是会导致进程的页表过长、降低页面换进换出的效率。

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

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

二、内存查看:

[pl     ai   n] 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 +Buffe     rs   /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 es  TI ma     te   d available memory

Many load balancing and workload placing progr     ams   check /proc/meminfo to es  TI mate 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     ram   fs, and it does not include reclaimable slab memory, which     can   take up a large frac  TI on 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/Documenta  TI on/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) co     pi   ed, 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分区变大了。



42
60
0
83

相关资讯

  1. 1、博通为物联网打造强大网络3186
  2. 2、特朗普重点关注AI,全球人工智能竞争再次提速3781
  3. 3、德国机床总体需求增长势头疲软,中国仍然是其最大的机床市场1726
  4. 4、减压阀的设置要求241
  5. 5、嵌入式处理器中cache数据不一致性的解决方法478
  6. 6、怎样做可以优化计算机内存221
  7. 7、工业网络安全趋势:公钥加密2506
  8. 8、初学PLC是学习西门子还是三菱?1526
  9. 9、BitUN:数字货币是今年最火爆的众筹488
  10. 10、CMOS双路轨到轨放大器AD8541/42/44的特性及应用范围328
全部评论(0)
我也有话说
0
收藏
点赞
顶部