Linux内存不够了?看看如何开启虚拟内存增加内存使用量

news2025/1/8 5:18:16
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

文章转载自:sowler

原文链接:https://www.cnblogs.com/sowler/p/18277877

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

前端技术回顾系列 14 | 总结 + Vue 3.x 必修课

欢迎关注公众号:CodeFit 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 1. 回顾系列的初衷和目标 在六月初,我开始编写 「前端技术回顾系列 2024」&a…

⭕️【读论文】Learning To Count Everything

2021 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) 任务名称: visual counting ; few shot counting;crowd counting;cell counting 目录 Abstract 1. Introduction 2. Related Works 3. Few-…

JavaScript (十)——JavaScript 比较 和 逻辑运算符

目录 JavaScript 比较 和 逻辑运算符 比较运算符 如何使用 逻辑运算符 条件运算符 语法 JavaScript 比较 和 逻辑运算符 比较和逻辑运算符用于测试 true 或者 false 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等。 如何使用 可以在条件语…

Vulnhub靶机:JANGOW_ 1.0.1

目录 前言: 一、安装虚拟机Jangow:1.0.1靶机 二、Web部分 前言: 难度:简单,本文使用VirtualBox打开,下载地址: https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 一、安装虚拟机J…

JMeter接口测试-6.JMeter项目实战

1.项目介绍 知识点: 微信小程序项目及接口文档介绍 1.1 微信小程序项目介绍 微信开发者工具 下载:微信开发者工具下载地址与更新日志 | 微信开放文档 项目代码运行 使用登录扫码,登录开发者工具 登录成功后,选择小程序 点击…

Spring Security 概述,鸟瞰 Spring Security 及其功能

在本文中,我们将从鸟瞰的角度了解 Spring Security 的用途以及它能为我们提供什么。网络上的任何东西都可能是攻击的潜在受害者。不幸的是,在这个即使是最富有、最具创新性的技术公司也会受到黑客攻击的世界里,保护 Web 应用程序并实现授权和…

LLM:并行化训练

llama3.1论文称使用了:张量并行(TP)、流水线并行(PP)、上下文并行(CP)和数据并行(DP)。 并行化可以先粗分为: 1.数据并行 2.模型并行:张量并行&…

多模态多智能体,在实现系统2(深思熟虑)方面的探索

多模态和多智能体,在系统2(深思熟虑)方面的探索 提出背景理性的定义为什么理性定义是四大基本原则,而不是其他数量,又为何是这四个,而不是其他?理性 不等于 推理 通过多模态多智能体系统增强理性…

el-table 表格序号列前端实现递增,切换分页不从头开始

<el-table-column type"index" width"55" label"序号" :index"hIndex"> </el-table-column> 分页 <el-pagination size-change"handleSizeChange" current-change"handleCurrentChange"> <…

【Linux】动态库|静态库|创建使用|动态库加载过程

目录 ​编辑 前言 静态库 为什么要使用库(形成原理 ) 生成一个静态库 静态库的使用 动态库 生成一个动态库 动态库的使用 解决方法 动态库加载过程 ​编辑 前言 库&#xff08;Library&#xff09;是一种方式&#xff0c;可以将代码打包成可重用的格式&#xff08;站…

OrionX:革新GPU资源管理,助力AI开发团队高效运作

您的AI开发团队是否经常陷入这样的窘境&#xff1a; 人多卡少&#xff0c;GPU资源难以满足每个成员的需求&#xff1f; 当开发环境中需要变更GPU卡配置时&#xff0c;流程繁琐不堪&#xff0c;不得不关闭容器、重新配置再重启&#xff1f; 是否曾因GPU卡分配后未被充分利用而…

简单好用的DX修复工具下载|修复丢失损坏的DLL文件

DirectX是被广泛运用于游戏和多媒体应用程序的一种重要组件&#xff0c;它可以提供优良的视觉效果和音频体验。很多用户在使用计算机时或多或少会遇到因为DirectX缺失而导致相关问题。例如&#xff1a;系统故障、图形渲染错误、音频失真等问题。 今天小编将深入浅出地为大家讲…

在循环语句里面element重复提示最后一条的解决办法

做项目时遇到了个问题&#xff0c;要求把时间重叠的每个阶段都提示出来 但是发现$message的提示框不仅都重合在一起 并且数据内容只是最后一次循环出来的信息如下图 首先解决样式重合问题 这里我就用的是简单粗暴的方法加个定时器 这样重合问题就可以解决其次是提示内容只是最后…

删除分区 全局索引 drop partition global index Statistics变化

1.不一定unusable&#xff0c;可以先删除data (index 再删除过程中会更新结构)再drop/truncate. ---------------------- CREATE TABLE interval_sale ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE ) PARTITION BY RANGE (time_i…

前端面试宝典【HTML篇】【4】

欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例:每一期专栏都将深入剖析真实的前端面试案例,从基础知…

C++回顾——虚析构

一、示例代码 #include<iostream> using namespace std;class Weapon { public:virtual void getWeapon() 0;//virtual ~Weapon() default; };class bow :public Weapon { public:void getWeapon() override{cout << "弓箭 " << ends;}~bow(){c…

支持对接OpenAI、Ollama和本地向量模型,MaxKB开源知识库问答系统发布v1.4.0版本

2024年8月1日&#xff0c;MaxKB开源知识库问答系统正式发布v1.4.0版本。在这一版本中&#xff0c;MaxKB的社区版支持对接OpenAI、Ollama和本地的向量模型&#xff0c;并且支持设置模型的使用权限&#xff0c;同时MaxKB还支持知识库自定义向量模型。 自v1.4.0版本开始&#xff…

坐牢第二十一天 20240801(IO)

一.作业 1、使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <myhead.h> struct Node {char *src;char *dest;int start;int len; }; //定义求源文件大小的函数 int…

python爬虫初识

一、什么互联网 互联网&#xff08;Internet&#xff09;是全球范围内最大的计算机网络&#xff0c;它将数以百万计的私人、公共、学术、商业和政府网络通过一系列标准通信协议&#xff08;如TCP/IP&#xff09;连接起来形成的一个庞大的国际网络。 互联网的起源可以追溯到196…