Linux内存不够了?看看如何开启虚拟内存增加内存使用量
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
参数说明:
dd
:dd
用来创建交换文件。if=/dev/zero
:if
参数表示输入文件(input file)的路径。/dev/zero`是一个特殊设备文件,它会提供一系列的零字节。of=/opt/swapdata
:of
参数表示输出文件(output file)的路径。指定了交换文件的路径为/opt/swapdata
。选择其他路径和文件名。bs=1024
:bs
参数表示块大小(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内存不够了?看看如何开启虚拟内存增加内存使用量的更多相关文章
- Linux之《荒岛余生》(三)内存篇
原文:https://juejin.im/post/5c00aee06fb9a049be5d3641 小公司请求量小,但喜欢滥用内存,开一堆线程,大把大把往jvm塞对象,最终问题是内存溢出. 大公司并 ...
- Linux性能优化从入门到实战:12 内存篇:Swap 基础
内存资源紧张时,可能导致的结果 (1)OOM 杀死大内存CPU利用率又低的进程(系统内存耗尽的情况下才生效:OOM 触发的时机是基于虚拟内存,即进程在申请内存时,如果申请的虚拟内存加上服务器实际已用的 ...
- linux内核剖析(十一)进程间通信之-共享内存Shared Memory
共享内存 共享内存是进程间通信中最简单的方式之一. 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区. 共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程 ...
- (理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝
为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱. 探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至没有机会去应用,激动在于技术的相同性,新的框架不 ...
- linux free命令详解和使用实例(查看内存使用率)
转载:http://www.jb51.net/LINUXjishu/152017.html 1.命令格式: free [参数] 2.命令功能: free 命令显示系统使用和空闲的内存情况,包括物理内存 ...
- Linux内存管理 —— 内核态和用户态的内存分配方式
1. 使用buddy系统管理ZONE我的这两篇文章buddy系统和slab分配器已经分析过buddy和slab的原理和源码,因此一些细节不再赘述.所有zone都是通过buddy系统管理的,buddy ...
- Linux性能优化从入门到实战:08 内存篇:内存基础
内存主要用来存储系统和应用程序的指令.数据.缓存等. 内存映射 物理内存也称为主存,动态随机访问内存(DRAM).只有内核才可以直接访问物理内存. Linux 内核给每个进程都提供了一个独立的 ...
- Linux学习笔记(14)-进程通信|共享内存
在Linux中,共享内存是允许两个不相关的进程访问同一个逻辑内存的进程间通信方法,是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式. 不同进程之间共享的内存通常安排为同一段物理内存.进程可 ...
- Linux kernel 4.9及以上开启TCP BBR拥塞算法
Linux kernel 4.9及以上开启TCP BBR拥塞算法 BBR 目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 效果并不比速锐差 Linux kernel 4.9+ 已支持 tcp_bb ...
- 《linux性能及调优指南》 3.3 内存瓶颈
摘要:3.3内存瓶颈OnaLinuxsystem,manyprogramsrunatthesametime.Theseprogramssupportmultipleusers,andsomeproce ...
随机推荐
- js原生小知识
new Array(3).fill(0) 就会生成3个元素为0的数组
- 80x86汇编—分支循环程序设计
文章目录 查表法: 实现16进制数转ASCII码显示 计算AX的绝对值 判断有无实根 地址表形成多分支 从100,99,...,2,1倒序累加 输入一个字符,然后输出它的二进制数 大小写转换 大写转小 ...
- angular 16 路由守卫更新
在 angular16 中守卫使用方式进行了更新,route 守卫被弃用(取消了CanActivate的使用),新增了功能性守卫(CanActivateFn),支持 inject 注入,官网提供了一个 ...
- java学习之旅(day.01)
Markdown学习 标题 一级标题:#空格+标题名字 二级标题:##空格+标题名字 三级标题:###空格+标题名字 字体 粗体:两边都加两个** Hello,world 斜体:两边都加一个* Hel ...
- 你不知道的PageContext
你不知道的PageContext 最近在文艺复兴,学习JSP和Servlet,此文为笔者学习记录. 本文分为以下几个部分: 前言 环境搭建 正文 总结 前言 在我们使用的项目中,存储数据最常用的非 S ...
- MySQL查看实时执行的SQL语句
MySQL默认不能实时查看执行的SQL语句,因为这会消耗一定的资源. 要开启这个功能,稍微配置一下,打开这个LOG记录就可以了. 1 查看LOG功能 首先,查看是否已经开启实时SQL语句记录. mys ...
- ceph deploy部署ceph集群 ceph扩容 rbd存储
架构拓扑 节点主机 节点IP 节点角色 OS ceph-admin 10.0.0.60 admin deploy mds centos7 ceph-node1 10.0.0.61 mon osd md ...
- linux上使用webdav
webdav 干什么用的? 对于我来说,主要是用来同步文件的,n年以前,那时候还啥都不懂,要分享一个文件都是用qq/或者微信发,那时候就一个手机一个电脑,而且文件大部分是分享给认识的人. qq分享完全 ...
- 数据结构之栈(Java,C语言的实现)以及相关习题巩固
目录 栈 概念以及代码实现 例题 232. 用栈实现队列 1614. 括号的最大嵌套深度 234. 回文链表 1614. 括号的最大嵌套深度 LCR 123. 图书整理 I 206. 反转链表 402 ...
- Centos7安装Nginx教程,一步安装http和https
nginx是一款轻量级web服务器,主要有负载均衡和反向代理的特性. 安装准备 nginx一些模块需要依赖lib库,所以先安装lib库,执行以下命令: [root@localhost local]# ...