Linux的虚拟内存与缓存
  OA1YrrnZTT2u 2023年11月26日 21 0

虚拟内存

什么是虚拟内存?

虚拟内存是一种系统机制,通过将硬盘空间与实际内存结合起来,为进程提供比实际内存更大的虚拟地址空间。在程序运行时,系统只需将虚拟地址空间的一小部分映射到内存中,而将其余部分存储在硬盘上(更简单的说法就是程序的虚拟空间相当于实际物理内存再加上一部分硬盘空间)。当访问的虚拟地址不在内存中时,说明该地址未映射到内存,而是存储在硬盘上。因此,需要的虚拟存储地址会被动态调入内存。同时,当系统内存紧张时,不使用的虚拟存储空间可以被交换到硬盘上,以释放物理内存空间。系统通过不断进行这种换入和换出的操作,用户几乎感觉不到,这都是虚拟内存机制的巧妙之处。

简单理解,虚拟内存就是系统利用 硬盘空间与实际内存结合 ,为进程提供比内存更大的虚拟空间,通过动态映射和交换,实现对内存资源的高效利用。

不过万事皆有利弊,由于开启swap分区读取硬盘,会导致硬盘IO性能下降,因此譬如很多云服务器初始状态都不会配置swap,如果某些程序恰好需要大内存,可以采用下面方法学习

怎么看我的虚拟内存?

在Linux中,swap分区是专门为虚拟存储空间预留的硬盘空间。通常建议将其大小设置为内存大小的两倍左右。可以使用命令 "swapon -s" 来查看交换分区的大小。

root@admin:~# swapon -s
Filename                                Type            Size    Used    Priority
/mnt/swap                               file            4194300 0       -1

Linux的虚拟内存与缓存_缓存

上面的前三个分别是目录,类别(虚拟内存文件)和大小(4gb) ,

最后两个指标的含义:

  • 已使用(Used)列显示已经使用的交换空间大小,这里是0 KB。也就是并没使用虚拟内存,内存比较充足。
  • 优先级(Priority)指定了多个交换空间时的优先级。

这个优先级就是使用的优先程度,假如你有n个虚拟内存分区,可以通过改变优先级改变调动顺序。数值越大优先越高,最大为-1表示无限优先。

如何创建虚拟内存?

在Ubuntu下,创建 1G 的 swap,可以根据你的服务器来调整大小

其中of=/mnt/swap: 这个部分指定了dd命令的输出文件(of 表示 output file)。在这里,指定了输出文件的路径为/mnt/swap,表示在/mnt目录下创建一个名为swap的文件。

dd if=/dev/zero of=/mnt/swap bs=1M count=1024

设置交换分区文件位置 也就是上面我们设置的那个

mkswap /mnt/swap

启动 swap

swapon /mnt/swap

设置开机时自启用虚拟内存?

需要修改文件 /etc/fstab 中的 swap 行

vim /etc/fstab

在结尾添加

/mnt/swap swap swap defaults 0 0

之后我们就已经开启虚拟内存 用刚才的命令可以验证

设置虚拟内存使用频率?

sysctl vm.swappiness=40

可以通过swappiness值进行管理,swappiness表示系统对Swap分区的依赖程度, 数值越大,依赖程度越高,最大是100,越高越频繁。

但是对于硬盘速度比较慢的朋友,设置特别大就很难受了

当你设置为0时候会完全使用物理内存,那就没有用了

所以,这个比例值一般不宜配置过高,但也不能太低,个人一般使用10-20,即尽量优先使用物理内存。

虚拟内存的原理?

每个进程拥有独立的4GB虚拟内存空间,具有相似的结构。

新进程建立时,将其数据和代码从磁盘拷贝到自己的内存空间,页表记录了内存空间的分配情况,包括有数据的地址等。

(页表:简单理解为为了管理虚拟内存,计算机使用了一个工具叫做页表,就像地图一样。这个地图告诉计算机哪些地方在实际内存上,哪些在硬盘上。)

进程访问虚拟地址(硬盘中的文件)时,会查看页表,缺页(物理内存找不到)时从磁盘复制到内存,若物理内存不足,将不用的资源调至硬盘swap分区。

缓存

缓存内存是什么?

首先我们了解 /proc/meminfo 文件: /proc/meminfo 文件是Linux系统的一个文件,提供了有关系统内存的详细统计信息,包括各种内存用途的数据。

我们利用它去查看内存信息

cat /proc/meminfo
root@admin:~# cat /proc/meminfo
...
Cached:          1680620 kB
...

可以看到一个叫Cached Memory(可能显示为Cached)

Linux的虚拟内存与缓存_虚拟内存_02

Cached Memory 的含义: Cached字段表示已被内核用于文件系统缓存的内存量。这包括最近读取的文件数据以及预测性地缓存可能被访问的数据,从而提高文件系统的性能。

也就是一种预测的缓存,为了加快运行速度而实现的。所以有的时候我们开的应用很少,空闲内存却也很少。

不过,Cached Memory 是可以被释放的: 尽管Cached内存用于缓存,但实际上,当系统需要更多内存来满足运行程序的需求时,这部分缓存会被释放,增加系统的可用内存。因此,即使Cached内存被占用,它并不是永久性占用,系统会动态管理内存以满足实际需求。

如何释放缓存?

你可以通过这种方式清空缓存,来增加空闲内存

To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches

不过正如上面所说,它会在需要的时候自动释放,所以其实没有必要手动释放它。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月26日 0

暂无评论

推荐阅读
  6YY0QMPUXEwu   2023年12月10日   11   0   0 linux网卡
  Ex81gqy3LOX7   2023年12月07日   9   0   0 linux
  nIt0XG0acU8j   2023年12月11日   16   0   0 linuxhtop
  nIt0XG0acU8j   2023年12月09日   19   0   0 linuxsort