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

说明:

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring cloud gateway源码分析,一个请求进来的默认处理流程

1.前言 spring cloud gateway的基本组成和作用就不细赘述,此篇适合对此有一定了解的人阅读。 spring cloud gateway版本: Hoxton.SR1 spring cloud gateway的配置使用yml配置: server:port: 9527y#根据微服务名称进行动态路由的配置 spring:applicati…

【Amazon】通过代理连接的方式导入 AWS EKS集群至KubeSphere主容器平台

文章目录 一、设置主集群方式一:使用 Web 控制台方式二:使用 Kubectl命令 二、在主集群中设置代理服务地址方式一:使用 Web 控制台方式二:使用 Kubectl命令 三、登录控制台验证四、准备成员集群方式一:使用 Web 控制台…

linux上编写进度条

目录 一、预备的两个小知识1、缓冲区2、回车与换行 二、倒计时程序三、编写入门的进度条四、编写一个正式的五、模拟实现和下载速度相关的进度条 一、预备的两个小知识 1、缓冲区 首先认识一下缓冲区:先写一个.c文件如下: 我们执行一下这个程序时&…

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类

有时候我们在MFC项目开发过程中,需要用到一些微软已经提供的功能,如VC使用EXCEL功能,这时候我们就能直接通过VS2019到如EXCEL.EXE方式,生成对应的OLE头文件,然后直接使用功能,那么,我们上篇文章…

索尼PMW580视频帧EC碎片重组开启方法

索尼PMW580视频帧EC碎片重组开启方法 索尼PMW-580摄像机生成的MXF文件存在严重的碎片化,目前CHS零壹视频恢复程序MXF版、专业版、高级版已经支持重组结构体正常的碎片,同时也支持对于结构体破坏或者覆盖后仅存在音视频帧EC数据的重组,需要注…

次世代建模纹理贴图怎么做?

在线工具推荐: 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是次时代建模? "次世代建模"是一个术语,通常用来描述…

边缘数据中心和5G的融合彻底改变数据传输和物联网

伴随着数字化时代的飞速发展,边缘数据中心和5G技术的联袂崛起,正深刻塑造着人们对数据的创造、传输和处理方式。据Gartner公司的预测,到2025年,企业数据的三分之二将在边缘计算设施中涌现,而非传统的集中式数据中心。这…

抑郁症中西医治疗对比?

抑郁症是一种常见的心理障碍,治疗方法包括中医和西医两种。下面就抑郁症中西医治疗进行对比: 治疗方法:中医治疗抑郁症强调整体观念和辨证论治,通过调理身体各部分的功能,达到治疗抑郁症的目的。中医治疗抑郁症多采用天…

【数据结构】循环链表和双向链表

【循环链表】 (有头结点) pR1->next; R1->nextR2->next->next; free(R2->next); R2->nextp; 例&#xff1a;对于两个单循环链表a&#xff0c;b&#xff0c;将其连接起来&#xff0c;变成一个单循环链表 #include<stdio.h> #include<stdlib.h> …

【动态规划】LeetCode-62.不同路径

&#x1f388;算法那些事专栏说明&#xff1a;这是一个记录刷题日常的专栏&#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目&#xff0c;在这立下Flag&#x1f6a9; &#x1f3e0;个人主页&#xff1a;Jammingpro &#x1f4d5;专栏链接&…

数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)

目录 一.什么是链表 二.链表的实现 节点的插入 头插法 尾插法 指定位置插入 节点的删除 删除第一次出现的关键字节点 删除所有关键字节点 节点的查找 链表的清空 链表的长度 前言&#xff1a;在上一篇文章中&#xff0c;我们认识了线性数据结构中的顺序表&#xff0…

K8s 中 Pod OOMKilled 原因

目录 Exit Code 137 解决方案 JVM 感知 cgroup 限制 使用 JDK9 的容器感知机制尝试 问题分析 容器内部感知 CGroup 资源限制 在 Java10 中&#xff0c;改进了容器集成 JVM 参数 MaxDirectMemorySize -XX:MaxDirectMemorySize 的默认值是什么&#xff1f; 其他获取 ma…

SQL server 2016安装

1、关系数据库的基本概念。 行&#xff1a;每行成为一条“记录”或“元组”&#xff0c;用于描述一个对象的信息。 列&#xff1a;每列称为一个“字段”或“属性”&#xff0c;用于描述对象的一个属性。 2、主键与外键。 主键&#xff1a;键&#xff0c;即关键字。主键由一个或…

【高效开发工具系列】驼峰下划线互转

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

微信小程序自定义tabBar简易实现

文章目录 1.app.json设置custom为true开启自定义2.根目录创建自定义的tab文件3.app.js全局封装一个设置tabbar选中的方法4.在onshow中使用选中方法最终效果预览 1.app.json设置custom为true开启自定义 2.根目录创建自定义的tab文件 index.wxml <view class"tab-bar&quo…

SQL Server 2016(创建数据表)

1、需求描述。 在名为“class”的数据库中创建表&#xff0c;表名称为“course”&#xff0c;其中要包含序号、课程、课程编号、学分、任课教师、上课地点、开始时间、结束时间、备注等列。 设置各个字段的数据类型。其中&#xff0c;"序号"列为标识列&#xff0c;从…

scrapy介绍,并创建第一个项目

一、scrapy简介 scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted异步网络框架&#xff0c;可以加快我们的下载速度。 Scrapy文档地址&#xff1a;http://scrapy-chs.readthedocs.io/z…

如果你想成为一名提示词工程师(Prompt Engineer),这款工具你不能错过

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 前言 我们知道&#xff0c;如果想要通过AI得到更好更精确的答案&#xff0c;那么提示词Prompt的好坏至关重要。 因此&#xff0c;提示词工程师这个岗位应运而出。…

优化问题,详解静态优化

优化问题&#xff0c;尤其静态优化问题&#xff0c;在控制系统设计中随处可见&#xff0c;例如基于燃油经济性和驾驶体验的多目标优化的汽车发动机 MAP 标定&#xff0c;基于性能指标优化的飞行器结构设计参数优化&#xff0c;以实验数据与模型输出匹配为目标的电池 RC 等效电路…

创建腾讯云存储桶---上传图片--使用cos-sdk完成上传

创建腾讯云存储桶—上传图片 注册腾讯云账号https://cloud.tencent.com/login 登录成功&#xff0c;选择右边的控制台 点击云产品&#xff0c;选择对象存储 创建存储桶 填写名称&#xff0c;选择公有读&#xff0c;私有写一直下一步&#xff0c;到创建 选择安全管理&#…