1、为什么要使用虚拟内存

当我们没有多余的钱去购买大内存的云服务器时,但是当前服务器里面的软件和程序运行的比较多导致内存不够用了。这个时候可以通过增加虚拟内存来扩大内存容量。但是在启用虚拟内存时,需要仔细考虑系统的实际需求和硬件配置,以及权衡虚拟内存的优缺点,考虑好利弊后在开启虚拟内存。

2、什么是虚拟内存

虚拟内存是一种将部分物理内存扩展到磁盘空间的技术,以提供更大的内存空间和更好的系统性能。虚拟内存允许系统在物理内存不足时,将不常用的内存页转移到磁盘上,从而释放物理内存供活跃的进程使用。

使用虚拟内存的优点:

  • 增加可用内存: 虚拟内存允许系统在物理内存不足时将部分内存数据存储到磁盘上,从而扩展了系统可用的内存空间。这样,即使系统的物理内存已经用尽,

    仍然可以继续运行应用程序,避免了因内存不足而导致的系统崩溃或应用程序崩溃。

  • 提高系统稳定性:虚拟内存可以防止系统因内存不足而崩溃。当物理内存不足时,Linux会将部分不活跃的内存页交换到交换空间中,从而释放物理内存供活跃的进程使用,提高了系统的稳定性和可靠性。

  • 支持大型程序运行: 对于需要大量内存的应用程序,如数据库服务器或大型数据处理应用,虚拟内存可以提供额外的内存空间,使其能够在物理内存有限的情况下继续运行。

  • 灵活管理内存:虚拟内存允许系统管理员根据实际需求动态调整交换空间的大小。通过调整交换空间的大小,可以根据系统的负载情况和应用程序的内存需求来优化系统的性能和稳定性。

  • 提高系统响应速度:虚拟内存可以减少因内存不足而导致的系统响应速度下降的情况。当系统使用虚拟内存时,虽然会增加磁盘 I/O 操作,但可以保持系统运行,并在内存资源再次可用时恢复正常操作。

使用虚拟内存的弊端:

  • 性能影响: 虚拟内存的使用可能会导致系统性能下降。当系统内存不足时,操作系统会将部分内存数据交换到磁盘上的交换空间中,这涉及到频繁的磁盘读写操作,会增加系统的响应时间和延迟。
  • 磁盘空间消耗: 交换空间占用磁盘空间,可能会导致磁盘空间不足的问题,特别是在磁盘本身就比较小的情况下。
  • SSD 磨损: 如果交换空间设置在 SSD 上,频繁的写入操作可能会加速 SSD 的磨损,缩短其寿命。
  • 应用程序性能下降:当系统使用虚拟内存时,应用程序可能会因为频繁的磁盘读写而性能下降,尤其是对于需要大量内存的应用程序。
  • 系统稳定性: 如果交换空间设置不当或者交换空间不足,可能会导致系统稳定性问题,如系统死锁或应用程序崩溃。

总的来说,虚拟内存的使用可以提高系统的稳定性、可用性和性能,使系统能够更好地应对变化的工作负载和内存需求。但是在启用虚拟内存时,需要仔细考虑系统的实际需求和硬件配置,以及权衡虚拟内存的优缺点。在某些情况下,可能需要调整交换空间的大小或者考虑其他内存管理策略来优化系统性能。

3、物理内存

物理内存是用于存储正在运行的程序和数据的地方,读写速度低于CPU,但是高于磁盘。当应用程序需要使用内存时,它会向操作系统请求内存分配。操作系统会将需要的数据载入物理内存中,并管理内存的分配和释放。当物理内存不足时,系统将部分数据从物理内存交换到磁盘上的交换区(Swap),这样可以释放物理内存,以便给其他进程使用。将数据交换到Swap会导致性能下降。因此系统管理员和开发人员最好要合理规划和管理物理内存,确保系统具有足够的内存来运行应用程序和提供良好的性能。

4、Swap介绍

Swap是Linux系统中的一种虚拟内存技术,用于辅助物理内存(RAM)的管理。当物理内存不足时,Swap提供了一种将部分内存内容交换到硬盘上的方法,以释放物理内存供其他进程使用。当物理内存不够的时候,会把不活跃的进程暂时存储到交换区。当需要这条进程时就从交换区重新加载到内存,否则它不会主动交换到物理内存中。swap有三种交换方式:交换分区(Swap Partition)、交换文件(Swap File)、交换空间(Swap Space)。

swap相关使用命令:

显示当前启用的交换分区和交换文件的摘要信息,包括路径、大小和使用情况:

swapon -s

swapon -show

启用指定的交换分区或交换文件:

swapon /opt/swapfile     # 启用交换文件

swapon /dev/vda1         # 启用交换分区

创建交换分区或交换文件:

mkswap swapdata

关闭正在使用的交换分区或交换文件

swapoff /opt/swapfile     # 关闭交换文件

swapoff /dev/vda1         # 关闭交换分区

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

swapon -p 0 /opt/swapfile   # 交换文件路径

5、虚拟内存设置

通过设置交换文件设置虚拟内存。

5.1、查看可用磁盘空间
df -h
5.2、 使用 dd 工具来创建一个交换文件
dd if=/dev/zero of=/opt/swapdata bs=1024 count=16777216

参数说明:

  • dddd 用来创建交换文件。
  • if=/dev/zeroif 参数表示输入文件(input file)的路径。/dev/zero`是一个特殊设备文件,它会提供一系列的零字节。
  • of=/opt/swapdataof参数表示输出文件(output file)的路径。指定了交换文件的路径为/opt/swapdata。选择其他路径和文件名。
  • bs=1024bs参数表示块大小(block size),指定 dd 命令一次传输的数据块大小为1024字节(即1KB)。根据需求进行调整。
  • count=16777216:创建一个16GB大小的交换文件。与 bs 参数相乘,即16GB = 1024 * 1024 * 16 可以根据需要调整此参数来大小

创建成功在/opt目录生成一个swapdata文件

5.3、 设置交换文件的权限为只有 root 用户能读写:
chown root:root /opt/swapdata # 交换文件的所有者和所属组

chmod 600 /opt/swapdata   #只有root用户能读写

5.4、 创建文件类型设置为交换文件
mkswap /opt/swapdata # 交换文件路径
5.5、激活文件:指定的交换文件
swapon /opt/swapdata

激活成功后就可以使用 swapon -s 查看交换文件的摘要信息了

5.6、机器重启的时候自动挂载Swap
# 进入/etc/fstab文件进行修改。
vim /etc/fstab #末尾追加
/opt/swapdata swap swap defaults 0 0

5.7、配置swap分区的使用机制

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

cat /proc/sys/vm/swappiness

该参数范围为0-100。0 就是最大限度使用内存,尽量不使用swap。100是积极使用swap。越高越会使用swap分区。重新配置值:

sysctl vm.swappiness=30

如需永久配置:

echo "vm.swappiness = 30" >> /etc/sysctl.conf
5.8、 查看使用情况

通过 free -h 命令查看内存使用情况。

6、关闭虚拟内存

关闭 swap 文件

swapoff /opt/swapdata

删除swap分区文件

rm -rf /opt/swapdata

删除fstab文件里追加的swap分区开机自动挂载配置内容

/opt/swapdata swap swap defaults 0 0

Linux内存不够了?看看如何开启虚拟内存增加内存使用量的更多相关文章

  1. Linux之《荒岛余生》(三)内存篇

    原文:https://juejin.im/post/5c00aee06fb9a049be5d3641 小公司请求量小,但喜欢滥用内存,开一堆线程,大把大把往jvm塞对象,最终问题是内存溢出. 大公司并 ...

  2. Linux性能优化从入门到实战:12 内存篇:Swap 基础

    内存资源紧张时,可能导致的结果 (1)OOM 杀死大内存CPU利用率又低的进程(系统内存耗尽的情况下才生效:OOM 触发的时机是基于虚拟内存,即进程在申请内存时,如果申请的虚拟内存加上服务器实际已用的 ...

  3. linux内核剖析(十一)进程间通信之-共享内存Shared Memory

    共享内存 共享内存是进程间通信中最简单的方式之一. 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区. 共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程 ...

  4. (理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝

    为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱. 探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至没有机会去应用,激动在于技术的相同性,新的框架不 ...

  5. linux free命令详解和使用实例(查看内存使用率)

    转载:http://www.jb51.net/LINUXjishu/152017.html 1.命令格式: free [参数] 2.命令功能: free 命令显示系统使用和空闲的内存情况,包括物理内存 ...

  6. Linux内存管理 —— 内核态和用户态的内存分配方式

    1. 使用buddy系统管理ZONE我的这两篇文章buddy系统和slab分配器已经分析过buddy和slab的原理和源码,因此一些细节不再赘述.所有zone都是通过buddy系统管理的,buddy ...

  7. Linux性能优化从入门到实战:08 内存篇:内存基础

    内存主要用来存储系统和应用程序的指令.数据.缓存等. 内存映射   物理内存也称为主存,动态随机访问内存(DRAM).只有内核才可以直接访问物理内存.   Linux 内核给每个进程都提供了一个独立的 ...

  8. Linux学习笔记(14)-进程通信|共享内存

    在Linux中,共享内存是允许两个不相关的进程访问同一个逻辑内存的进程间通信方法,是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式. 不同进程之间共享的内存通常安排为同一段物理内存.进程可 ...

  9. Linux kernel 4.9及以上开启TCP BBR拥塞算法

    Linux kernel 4.9及以上开启TCP BBR拥塞算法 BBR 目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 效果并不比速锐差 Linux kernel 4.9+ 已支持 tcp_bb ...

  10. 《linux性能及调优指南》 3.3 内存瓶颈

    摘要:3.3内存瓶颈OnaLinuxsystem,manyprogramsrunatthesametime.Theseprogramssupportmultipleusers,andsomeproce ...

随机推荐

  1. dotnet build error CS5001: Program does not contain a static 'Main' method suitable for an entry point

    前言 Docker环境编译.Net6项目,出现诡异的CS5001 Program does not contain a static 'Main' method suitable for an ent ...

  2. Python字符串方法:字符串查找、替换、分割

    字符串查找 Python 提供了内置的字符串查找方法find(),利用该方法可以在一个较长的字符串中查找子字符串.如果该字符串中,有一个或者多个子字符串,则该方法返回第一个子串所在位置的最左端索引,若 ...

  3. Linux中的which whereis locate

    which which会在PATH环境中搜寻可执行文件 whereis Linux会将系统里面所有的文件都搜集到一个数据库文件中,whereis从这个数据库文件里面寻找文件 locate locate ...

  4. Swift中的Tuple类型

    Swift中的Tuple类型可以包含任何值,并且这些值的类型可以互相不一样.Tuple本身比较简单,需要记得也就是访问Tuple的方式. 使用变量名访问 let http404Error = (404 ...

  5. ansible(17)--ansible的archive和unarchive模块

    1. archive模块 功能:在远端主机打包与压缩: 主要参数如下: 参数 说明 path 要压缩的文件或目录 dest 压缩后的文件 format 指定打包压缩的类型:bz2.gz.tar.xz. ...

  6. DNS(2) -- bind服务介绍及配置文件语法格式

    目录 1. bind服务 1.1 bind概述 1.2 bind程序包结构 1.3 bind配置文件详解 1.3.1 bind配置文件 1.3.1.1 bind主配置文件 1.3.1.2 bind区域 ...

  7. java里面的方法。

    java里面的方法. java方法是语句的组合,他们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建在其他地方被引用 方法类似于其他语言里面的函数 e ...

  8. CSRF(Pikachu靶场练习)

    CSRF(get) 自己随便输点东西,回显登录失败,查看源码没发现什么 点开提示,登录进去看看 看到可以修改个人信息,我们把居住改成China,修改成功,没发现urlhttp://127.0.0.1/ ...

  9. C 语言编程 — 输入/输出与文件操作

    目录 文章目录 目录 前文列表 输入/输出 scanf() 和 printf() getchar() 和 putchar() 文件操作 打开文件 关闭文件 写入文件 读取文件 二进制 I/O 函数 前 ...

  10. 训练营 |【AIRIOT大学计划暑期训练营】第三期即将开营,报名从速!

    培养新生力量,聚焦产业融合.为了促进物联网产业的纵深发展和创新,推进教育链.产业链与创新链的有机衔接,提高学生理论.实践和创新能力,为行业培养更多优秀人才,航天科技控股集团股份有限公司将于2023年7 ...