首页 > 系统相关 >Linux设置虚拟内存

Linux设置虚拟内存

时间:2022-11-20 17:26:28浏览次数:68  
标签:swappiness swapfile 内存 Swap 设置 Linux 虚拟内存 swap

一、虚拟内存介绍

背景介绍

  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存的造价是要高于磁盘的,且内存的断电丢失数据也是不能把所有数据和程序都保存在内存中的原因。

既然不能全部使用内存,那数据还有程序不可能一直霸占在内存中。当内存没有可用的,就必须要把内存中不经常运行的程序踢出去。但是踢到哪里去,这时候swap就出现了。

Swap全称为swap place,即交换分区。当内存不够的时候,被踢出的进程被暂时存储到交换区。当需要这条被踢出的进程时,就从交换区重新加载到内存,否则它不会主动交换到真实内存中。

Swap介绍

  在详细介绍swap之前,需要知道的是计算机内存分为物理内存与虚拟内存(注意虚拟内存和虚拟地址空间的区别)。

  物理内存是计算机的实际内存大小,由RAM芯片组成。虚拟内存则是虚拟出来的、使用磁盘代替内存。虚拟内存的出现,让机器内存不够的情况得到部分解决。当程序运行起来由操作系统做具体虚拟内存到物理内存的替换和加载(相应的页与段的虚拟内存管理)。这里的虚拟内存即所谓的swap。

  当用户提交程序,然后产生进程在机器上运行。机器会判断当前物理内存是否还有空闲允许进程调入内存运行,如果有则直接调入内存进行;如果没有,则会根据优先级选择一个进程挂起,把该进程交换到swap中等待,然后把新的进程调入到内存中运行。根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的限制。从这也可以看出swap扮演了一个非常重要的角色,就是暂存被换出的进程。

  内存与swap之间是按照内存页为单位来交换数据的,一般Linux中页的大小设置为4Kb。而内存与磁盘则是按照块来交换数据的。

Swap的设置

对于使用多大比例内存之后开始使用swap,在系统配置文件中可以通过调整参数进行修改。

cat /proc/sys/vm/swappiness

该参数范围为0-100。0就是最大限度使用内存,尽量不使用swap;100是积极使用swap。
物理内存无法更改,所以swap大小的设置将会影响应用能否正常运行。swap大小的确定,根据Centos官网介绍可以得出如下公式:

1 M = Amount of RAM in GB, and S = Amount of swap in GB, then If M < 2, S = M *2 Else S = M + 2

注意:最小不应小于32M。

swap相关命令

swapon(选项)(参数)

选项

-a:将/etc/fstab文件中所有设置为swap的设备,启动为交换区;
-h:显示帮助;
-p<优先顺序>:指定交换区的优先顺序;
-s:显示交换区的使用状况;
-V:显示版本信息。

查看当前swap的使用情况

swapon -s

关闭相应的 swap_disk_name

swapoff <Filename>

启动相应的 swap_disk_name

swapon <Filename>

多个swap设置优先级, 优先级相同将同时使用, 你可以在0到32767中间选一个数字给他

如果优先级相同将会同时使用

swapon -p 0 <Filename>

二、虚拟内存设置

1、检查 Swap 空间

在设置 Swap 文件之前, 有必要先检查一下系统里有没有既存的 Swap 文件

运行以下命令:

swapon -s

如果返回的信息概要是空的, 则表示 Swap 文件不存在

2、检查文件系统

在设置 Swap 文件之前,同样有必要检查一下文件系统,看看是否有足够的硬盘空间来设置 Swap

运行以下命令:

df -hal

检查返回的信息,还剩余足够的硬盘空间即可

3、创建并允许 Swap 文件

下面使用 dd 命令来创建 Swap 文件

dd if=/dev/zero of=/tmp/swapfile bs=1024 count=1024k

这样就建立一个/tmp/swapfile的分区文件,大小为1G。

参数解读:

if=文件名:输入文件名,缺省为标准输入。即指定源文件。if=input file

of=文件名:输出文件名,缺省为标准输出。即指定目的文件。of=output file

bs=bytes:同时设置读入/输出的块大小为bytes个字节

count=blocks:仅拷贝blocks个块,块大小等于bs指定的字节数。

4、格式化并激活 Swap 文件

上面已经创建好 Swap 文件,还需要格式化后才能使用。运行命令:

dd if=/dev/zero of=/tmp/swapfile bs=1024 count=1024k

激活 Swap ,运行命令:

swapon /tmp/swapfile

以上步骤做完,再次运行命令:

swapon -s

你会发现返回的信息概要:

Filename       Type   Size     Used   Priority
/tmp/swapfile  file   524284   0      -1

可以使用命令 free -m 来查看现在的内存

如果要机器重启的时候自动挂载 Swap ,那么还需要修改 fstab 配置。

用 vim 打开 /etc/fstab 文件,在其最后添加如下一行:

/tmp/swapfile swap swap defaults 0 0

最后,赋予 Swap 文件适当的权限:

chown root:root /tmp/swapfile

chmod 600 /tmp/swapfile

同时,我们还可以修改 Linux Swap 空间的 swappiness ,降低对硬盘的缓存。

Linux 会使用硬盘的一部分做为 Swap 分区,用来进行进程调度–进程是正在运行的程序–把当前不用的进程调成‘等待(standby)’,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动(active)’,睡眠的进程就会在 Swap 分区,把内存空出来让给‘活动’的进程。

如果内存够大,应当告诉 Linux 不必太多的使用 Swap 分区,可以通过修改 swappiness 的参数来设置。swappiness=0 的时候表示最大限度使用物理内存,然后才是 Swap 空间,swappiness=100 的时候表示积极的使用 Swap 分区,并且把内存上的数据及时的搬运到 Swap 空间里面。

通过以下命令可以看到:

cat /proc/sys/vm/swappiness

我们可以调整 swappiness 的值到一个合适的参数,从而达到最优化使用 Swap 的目的。

使用 sysctl 命令:

sysctl vm.swappiness=60

但是这只是临时性的修改,在你重启系统后会恢复默认的60,要永久设置,还需要在 vim 中修改sysctl.conf:

vi /etc/sysctl.conf

在这个文档加上这样一行:

vm.swappiness=60

保存退出 vim 。

这样一来,Swap 分区重启后都会生效了。

参考:

https://cloud.tencent.com/developer/article/1704157
https://www.cnblogs.com/machangwei-8/p/10354464.html
https://www.linuxcool.com/swapon

标签:swappiness,swapfile,内存,Swap,设置,Linux,虚拟内存,swap
From: https://www.cnblogs.com/mynode/p/16908949.html

相关文章

  • Linux性能工具-bpftrace入门
    一、bpftrace简介bpftrace是基于ebpf内核vm扩展出来的trace工具。bpftrace是Linux高级追踪工具和语言。该工具基于eBPF和BBC实现了通过探针机制采集内核和程序运......
  • linux笔记
    1.图文并茂解释开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别?什么是开源许可协议?自由软件/开源软件是自由的,免费的,源代码开放的,我们可自由下载安装和使用。同......
  • 与Windows相比Linux特有的功能有哪些以及启示
    首先Linux最突出的功能就是免费开源的。开源对于普通用户来说不是很重要,但是对于那些有技术要求的用户来说就是一个非常吸引人的功能了,因为开源就意味着任何人都可以修改其......
  • linux systemctl删除失效的服务单元
    目录linuxsystemctl删除失效的服务单元应用场景操作命令参考文档linuxsystemctl删除失效的服务单元应用场景mysql服务原生方式安装的,但是把对应的安装目录删除后,使用s......
  • 图文详解在VMware Workstation 16 PRO虚拟机上安装Rocky 8.6 linux系统
    一、安装VMwareWorkstation虚拟机下载VMwareWorkstation16PRO虚拟机https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html,下载后安......
  • linux下git升级
    安装需求: 1.​​>#yuminstallcurl-develexpat-develgettext-developenssl-develzlib-develasciidoc​​2.​​>#yuminstallgccperl-ExtUtils-MakeMaker​......
  • Debian编译安装最新的Linux kernel 6.1.0-rc3
    没有编译过​​Linux kernel的Linux运维工作是不完整的安装必要的包sudoaptupdate-y&&sudoaptinstallmakegccbc-y&&sudoaptinstallpkg-configlibncurses-de......
  • 【Unity3D】Unity 组件 ③ ( 为物体添加 AudioSource 组件 | 添加 AudioSource 组件 |
    文章目录​​一、为物体添加AudioSource组件​​​​1、AudioSource组件简介​​​​2、创建物体​​​​3、添加AudioSource组件​​​​4、导入音频文件资源​​​​......
  • java——多线程——Thread类的常用方法——设置线程名称
                                         Thread类的常用方法——设置线程名称设置线程的......
  • Windows Terminal 设置
    WindowsTerminal设置文章目录​​WindowsTerminal设置​​​​外观​​​​语言选择​​​​主题深​​​​主题浅​​​​标题栏隐藏与显示​​​​启动​​​​启动......