OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的

通过增加虚拟内存来提高内存使用

本文解决的实际问题:

当我们物理内存小的时候,会出现OOM,然后服务自动死掉的情况。因为物理内存大小是固定的,有没有其他好的办法来解决呢?这里我们可以适当调整Linux的虚拟内存来协作。

问题描述:

最近遇到一个情况,物理内存不够,导致项目一两天就自动死掉了。服务器物理内存就2GB,上面有好多服务,但是,又不能停,导致一个新上的项目,总是过一两天就自己死掉了。查看启动情况:

添加虚拟内存前,服务重启情况

从上图中,我们可以看到服务重启的频率,是不是相当的高了。解决这种情况,可以有以下两种方案

一、使用脚本定时查询,如果指定服务没有启动,就执行重启动作;

二、能否使用虚拟内存解决呢?

其实第一种方案,凯哥(凯哥Java:kaigejava)也尝试过了。最后还是选择试试第二种方案:提高虚拟内存大小,来解决物理内存捉襟见肘的情况呢?

在使用虚拟内存前,我们先来看看,当前服务器默认的虚拟内存的使用情况,使用top命令查看:

添加虚拟内存前Swap使用情况

从上图中,我们可以看到,swap区域的默认大小是1GB的,可用空间为0.这说明,交换区域已经被占满了,看来是需要提高swap区大小了。

在使用方案二之前,我们先来介绍以下基础知识:什么是虚拟内存?虚拟内存有什么作用?

虚拟内存是什么?

虚拟内存是一种计算机内存管理技术,它通过将磁盘空间作为辅助存储器来扩展物理内存(RAM),从而提供更大的可用内存空间。其主要作用包括:

有什么作用?

1.扩展可用内存空间: 当物理内存不足以同时容纳运行的所有程序和操作系统所需的数据时,虚拟内存允许操作系统将部分数据移到硬盘上,从而释放物理内存。

2.提供内存抽象: 虚拟内存为每个进程提供了一个独立的、连续的地址空间,使得每个进程感觉自己独占了整个内存。实际上,这些地址可能对应于物理内存中的不同位置,也可能在硬盘上的交换文件中。

3.方便内存共享: 多个进程可以共享相同的虚拟内存地址,而不必实际共享物理内存。这使得进程之间的通信和数据共享更为灵活。

需要注意事项:

对于物理内存较小的实体机,提高虚拟内存空间的确可以对程序运行产生一些帮助,但也有一些注意事项:

a.性能开销 使用虚拟内存会引入性能开销,因为从硬盘读写数据比从物理内存读写数据慢得多。过多地依赖虚拟内存可能会导致性能下降。

b.交换空间 当系统需要释放物理内存时,它会将不常用的数据移到交换文件(虚拟内存)中。如果过度使用交换空间,可能导致硬盘I/O过多,进而影响性能。

总结:

总体而言,虚拟内存是一种在有限物理内存情况下提供更大内存空间的有效手段,但过度使用虚拟内存可能会导致性能问题。在真实的环境中,合理配置虚拟内存大小,结合物理内存和系统负载进行调优,是确保系统平稳运行的关键。

好了,通过上面介绍,我们知道了,虚拟内存是什么了,那么接下来我们,需要思考的是,Linux操作系统下怎么扩大交换区呢?

在Linux系统下怎么创建和启用一个swap file,来提供额外的虚拟内存空间呢?

步骤如下:

  1. 在指定目录中创建指定大小的文件,这个文件将被用作交换文件。命令:

sudo fallocate -l 2G /home/swapfile

上面这条命令解读:

用于通过fallocate命令在/home目录下创建一个2GB大小的文件,这个文件将被用作交换文件。

2. 设置第一步文件的权限。命令:

sudo chmod 600 /home/swapfile

命令解读:

设置刚创建的交换文件的权限,将其设置为只有拥有者(owner)有读写权限,没有其他用户或组的权限。

3.将第一步创建的文件设置为Linux交换空间(swap)格式的文件。命令:

sudo mkswap /home/swapfile

解读:

使用mkswap命令将指定文件格式化为Linux交换空间(swap)。

4.将文件设置成系统一部分,用以提供额外虚拟内存。命令:

sudo swapon /home/swapfile

解读:

启用刚刚创建的交换文件,使其成为系统的一部分,以提供额外的虚拟内存。

5.设置系统启动时候自动启用交换文件。命令:

echo '/home/to/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

命令解读:

将一行配置添加到/etc/fstab文件中,该配置用于在系统启动时自动启用交换文件。这个文件系统表(fstab)中的条目指定了系统如何挂载各个文件系统和设备。

通过上面五个步骤之后,我们就创建了一个在home文件夹下,大小为2GB的swapfile虚拟空间了。

我们先来使用top命令查看swap情况:

添加虚拟内后,Swap区使用情况

使用free -h命令,来看看,虚拟空间使用情况:

查看Swap区已经使用和未使用情况

通过free -h命令,看到,虚拟内存由1GB,变成了2GB.说明我们新增加的2GB虚拟内存添加成功了。

下面是创建虚拟文件并指定的完整命令。

sudo fallocate -l 2G /home/swapfile
sudo chmod 600 /home/swapfile
sudo mkswap /home/swapfile
sudo swapon /home/swapfile
echo '/home/to/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

说明:

请用上面命令,请修改成自己实际的路径

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS第2天:

1. 二值信号量简介(386.11) 什么是信号量? 信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并 发调用。信号量这个名字,我们可以把它拆…

Android BT HCI分析简介

对于蓝牙开发者来说,通过HCI log可以帮助我们更好地分析问题,理解蓝牙协议,就好像网络开发一定要会使用Wireshark分析网络协议一样。 本篇主要介绍HCI log的作用、如何抓取一份HCI log,并结合一个实际的例子来说明如何分析HCI log…

eclipse中设置自动补齐代码

eclipse中设置自动补齐代码 01 在window里找到preference 02 在preference里搜索content assist 03 在Java的content assist设置 设置为.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 04 apply and close即可

mysql在linux环境下安装(rpm)以及初始化后的登录配置

注:该安装步骤转载于CSDN,下方配置为原创 按照图片安装并初始化完成MySQL等操作后进行; 安装对于rpm包集合 1-查看安装情况(有4个路径) whereis mysql 2-查看服务状态 systemctl status mysql 3-初始化数据库 mysqld --initial…

mybatis源码(五)springboot pagehelper实现查询分页

1、背景 springboot的pagehelper插件能够实现对mybatis查询的分页管理,而且在使用时只需要提前声明即可,不需要修改已有的查询语句。使用如下: 之前对这个功能一直很感兴趣,但是一直没完整看过,今天准备详细梳理下。按…

施人玫瑰手留余香和影像组学、医学人工智能未来漫谈

今天收到进阶班学员的留言: 提示:本文有硬核软文嫌疑,请慎重阅读。“ 我用您给我们讲的CLEAR,与一个审稿人进行了battle。有理有据。评估下来,我感觉我们的文章还是挺符合CLEAR的。” 我从来不排斥在商言商&#xff0…

初识数据结构及复杂度

1、数据结构 数据结构数据结构(描述和组织数据),Java会把一些数据结构封装起来,在java中数据结构叫做集合。 数据结构:(data structer)是计算机存储、组织数据的方式,指相互之间存在…

使用 mtcnn 和 facenet 进行人脸识别

一、前言 人脸识别目前有比较多的应用了,比如门禁系统,手机的人脸解锁等等,今天,我们也来实现一个简单的人脸识别。 二、思维导图 三、详细步骤 3.1 准备 3.1.1 facenet 权重文件下载 下载地址:https://drive.goo…

用户反馈组件实现(Vue3+ElementPlus)含图片拖拽上传

用户反馈组件实现&#xff08;Vue3ElementPlus&#xff09;含图片拖拽上传 1. 页面效果1.1 正常展示1.2 鼠标悬浮1.3 表单 2. 代码部分1.2 html、ts1.2 less部分 3. 编码过程遇到的问题 1. 页面效果 1.1 正常展示 1.2 鼠标悬浮 1.3 表单 2. 代码部分 1.2 html、ts <templ…

虚拟机备份数据自动化验证原理

备份数据成功备份下来了&#xff0c;但是备份数据是否可用可靠&#xff1f;对于这个问题&#xff0c;最好最可靠的方法是将备份数据实际恢复出来验证。 但是这样的方法&#xff0c;不仅费时费力&#xff0c;而且需要随着备份数据的定期产生&#xff0c;还应当定期做备份数据验…

在国内Facebook广告怎么解决充值渠道问题?

怎么解决Facebook预充值跑广告营销的付款方式问题呢&#xff1f; Facebook跑广告是很多做出口营销的公司或团队喜欢的平台之一&#xff0c;那就避免不了需要支付给Facebook平台广告费用了&#xff0c;那到底用什么方式去充值到FB号上去解决呢&#xff1f;FB预充值有什么咔可以…

产业迭代 共谋新生 喜尔康智家总冠名2023中国建材与家居行业焕新发展大会

2023年家居市场迎来了全新的变化&#xff0c;行业不断向绿色化、智能化方向发展&#xff0c;特别是在商务部等13部门发布《关于促进家居消费若干措施的通知》后&#xff0c;更加注重推动大家居市场产业升级迭代和高质量发展。在这个过程中&#xff0c;绿色化、智能化转型成为家…

同旺科技 USB TO SPI / I2C --- 调试W5500_读写网关地址

所需设备&#xff1a; 内附链接 1、USB转SPI_I2C适配器(专业版); 首先&#xff0c;连接W5500模块与同旺科技USB TO SPI / I2C适配器&#xff0c;如下图&#xff1a; 这里的网关地址设置为192.168.1.1 先将网关地址写入寄存器&#xff0c;然后再读取出来&#xff1a;

智能优化算法应用:基于共生生物算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于共生生物算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于共生生物算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.共生生物算法4.实验参数设定5.算法结果6.参考…

frp实现内网穿透(多端口穿透)

frp实现内网穿透 准备一个公网服务器&#xff08;腾讯、阿里、华为的云服务器&#xff09; 下载frp的安装包 下载对应系统的安装包&#xff0c;不要下错文件。 注意amd对应x86架构的系统 arm对应 arm架构系统&#xff08;macos&#xff09; 点击下载 查看文档将对应的安装包放…

VUE设计与实现共读系列之ref的实现【响应式原理】

前言 我们先顺一下vue使用响应式数据的流程&#xff1a; vue 是通过 ref 和 reactive 来创建响应式值&#xff0c;改变响应式值&#xff0c;视图跟着发生变化。 我们今天就来看一下ref和reactive是如何实现的 准备 首先&#xff0c;打开ref函数的位置 我们可以看到一个被re…

UVA1368 DNA Consensus String

DNA Consensus String The Hamming distance is the number of different characters at each position from two strings of equal length. For example, assume we are given the two strings “AGCAT” and “GGAAT.” The Hamming distance of these two strings is 2 bec…

Adobe Bridge——牵线搭桥

今天我们又一次来分享Adobe全家桶紧剩的几位成员之一&#xff0c;今天介绍的这一位成员&#xff0c;是Adobe公司开发的一个组织工具程序。 从Bridge中可以查看、搜索、排序、管理和处理图像文件,还可以使用Adobe Bridge 来创建新文件夹、对文件进行重命名、移动和删除操作、编辑…

【计算机概论 ①】- 电脑:辅助人脑的好工具

目录 一、电脑硬件的五大单元 二、一切设计的起点&#xff1a;CPU 的架构 三、其他单元的设备 四、运行流程 五、电脑的分类 六、电脑上面常用的计算单位&#xff08;容量、速度等&#xff09; 操作系统跟硬件有相当程度的关联性&#xff0c;所以&#xff0c;如果不了解一…